在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应
0到100之间的偶数printf
- 子进程2应
奇数介于0和100之间printf
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);
}
}
}
信号不是解决此问题的好方法。第一个信号丢失(在第二个子信号开始之前由第一个子信号发送),最后锁定(因为其中一个进程正在等待它已经丢失的信号)
尝试改用信号量或消息队列。他们对这个问题免疫,因为他们不会在系统中迷失方向,即使不是所有涉及的过程都已经启动。。。打印一些调试消息,然后(希望…)您将看到将要看到的内容。但是我有点困惑,因为这是一个家庭作业,要求我们使用退出/等待或使用信号进行同步,这是我们到目前为止学到的东西。我还不知道如何使用信号量或消息队列。你有可能用这些吗?谢谢你的回答。