如何通过 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");
}