如何通过 posix 命名信号量同步两个进程?
How to synchronize two processes by posix named semaphore?
假设有两个进程并且它们的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");
}
waitpid(pid_1)
只有当进程 1 是进程 2 的子进程时才能工作。
这个版本没有那个限制:
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");
}
假设有两个进程并且它们的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");
}
waitpid(pid_1)
只有当进程 1 是进程 2 的子进程时才能工作。
这个版本没有那个限制:
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");
}