【发布时间】:2021-01-04 03:52:24
【问题描述】:
我想创建两个包含一些迭代的子进程,以便进程 X 中的迭代 l 总是在进程 Y 中的迭代 l+1 之后执行。
#include <stdio.h>
#include <unistd.h>
#include <bits/stdc++.h>
#include <sys/wait.h>
#include <semaphore.h>
using namespace std;
sem_t mut;
int x = 2;
int main()
{
int cpX = fork();
sem_init(&mut, 1, 1);
if (cpX == 0)
{
//child A code
for (int i = 0; i < 10; i++)
{
sem_wait(&mut);
cout << "Inside X:" << getpid() << ", " << i << '\n';
sleep(rand() % 5);
}
exit(0);
}
else
{
int cpY = fork();
if (cpY == 0)
{
//child B code
for (int i = 0; i < 10; i++)
{
cout << "Inside Y:" << getpid() << ", " << i << '\n';
sleep(rand() % 5);
sem_post(&mut);
}
//sem_wait(&mut);
exit(0);
}
else
{
//sleep(50);
//wait(NULL);
//wait(NULL);
exit(0);
// wait(NULL);
}
}
}
但是在这里,X 执行一次,然后 Y 开始执行,X 不再执行。为什么会这样?
【问题讨论】:
-
可能是因为第一个子进程在信号量初始化之前被分叉了?
-
嗨,我也这样做了,但没有帮助。我认为问题在于使用 sem_init 创建的信号量必须位于共享内存空间中。
标签: c++ process fork semaphore