在LinuxC中交替同步两个进程

在LinuxC中交替同步两个进程,c,linux,C,Linux,我需要两个子进程来执行此操作: 子进程1应printf0到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)

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

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

} 
#包括
#包括
#包括
无效手柄1(内部信号)
{
如果(sig==SIGCONT)
{
升起(SIGCONT);
}
}
无效手柄2(内部信号)
{
如果(sig==SIGCONT)
{
升起(SIGCONT);
}
}
int main()
{
int i=-1;
如果(fork()==0)
{ 
信号(SIGCONT,handler1);
而(1)
{
printf(“%d\n”,i+1);
暂停();
kill(getpid()+1,SIGCONT);
}
}
如果(fork()==0)
{
信号(SIGCONT,handler2);
而(1)
{
暂停();
printf(“%d\n”,i+1);
kill(getpid()-1,SIGCONT);
}
}
} 

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


尝试改用信号量或消息队列。他们对这个问题免疫,因为他们不会在系统中迷失方向,即使不是所有涉及的过程都已经启动。

。。打印一些调试消息,然后(希望…)您将看到将要看到的内容。但是我有点困惑,因为这是一个家庭作业,要求我们使用退出/等待或使用信号进行同步,这是我们到目前为止学到的东西。我还不知道如何使用信号量或消息队列。你有可能用这些吗?谢谢你的回答。