1

我需要两个子进程来执行此操作:

  • 子进程 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

信号不是解决这个问题的好方法。第一个信号丢失(它是在第二个孩子开始之前由第一个孩子发送的),并且您最终被锁定(因为其中一个进程正在等待它已经错过的信号)。

尝试改用信号量或消息队列。它们不受这个问题的影响,因为它们不会在系统中丢失,即使并非所有涉及的进程都已启动。

于 2012-05-16T12:25:01.657 回答