假设有两个进程,它们的pid彼此已知:
void proc_1(){
printf("1\n");
printf("3\n");
}
void proc_2(){
printf("2\n");
printf("4\n");
}
如何使用posix命名信号量来同步上面的进程,以便输出看起来像:
1
2
3
4个
我的第一个想法是(假设有两个信号量,sem_1,sem_2,它们的初始值均为0):
void proc_1(){
printf("1\n");
sem_post(sem_2);
sem_wait(sem_1)
printf("3\n");
exit(0);
}
void proc_2(){
sem_wait(sem_2);
printf("2\n");
sem_post(sem_1);
waitpid(pid_1);
printf("4\n");
}
答案 0 :(得分:0)
waitpid(pid_1)
才有效。
这个版本没有这个限制:
void proc_1()
{
printf("1\n");
sem_post(sem_2);
sem_wait(sem_1);
printf("3\n");
sem_post(sem_2);
}
void proc_2()
{
sem_wait(sem_2);
printf("2\n");
sem_post(sem_1);
sem_wait(sem_2);
printf("4\n");
}