如何通过名为信号量的posix同步两个进程?

时间:2016-02-15 22:56:30

标签: c synchronization 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");
}

1 个答案:

答案 0 :(得分:0)

只有当流程1是流程2的子项时,

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");
}