1

これを行うには、2 つの子プロセスが必要です。

  • 子プロセス 1 はprintf、0 から 100 までの偶数でなければなりません。
  • 子プロセス 2 はprintf、0 から 100 の間の奇数でなければなりません。

実行後にターミナルに表示されるのは次のとおりです。0 1 2 4..100

これどうやってするの?

このプログラムを試してみましたが、うまくいきません。最初の整数 0 しか得られません:

#include <unistd.h>
#include <stdio.h>
#include <signal.h>

void handler1(int sig)
{
  if(sig == SIGCONT)
  {
     raise(SIGCONT);
  }
}

void handler2(int sig)
{
  if(sig == SIGCONT)
  {
     raise(SIGCONT);
  }
}

int main()
{
  int i=-1;

  if(fork()==0)
  { 
     signal(SIGCONT,handler1);
     while(1)
     {

        printf("%d\n",i+1);
        pause();
        kill(getpid()+1,SIGCONT);
     }
  }

  if(fork()==0)
  {
     signal(SIGCONT,handler2);
     while(1)
     {
       pause();

       printf("%d\n",i+1);
       kill(getpid()-1,SIGCONT);
     }
  }

} 
4

1 に答える 1

2

シグナルは、この問題の適切な解決策ではありません。最初のシグナルが失われ (2 番目の子が開始する前に最初の子によって送信されます)、ロックされてしまいます (プロセスの 1 つが、既に逃したシグナルを待っているため)。

代わりに、セマフォまたはメッセージ キューを使用してみてください。関連するすべてのプロセスがまだ開始されていない場合でも、システム内で失われないため、この問題の影響を受けません。

于 2012-05-16T12:25:01.657 に答える