我有一个产生一些子进程的进程。他们都共享一个信号量。

在我的主程序中。

sem_t *sharedSem = sem_open(SHAREDSEM, O_CREAT, 0600, 4); // Initial 1


在我的孩子程序中。

> sem_t * serverSem = sem_open(SHAREDSEM, 0);
sem_wait(serverSem);
printf("PRINTING\n");
sem_post(sharedSem);


我的观察是问题出在sem_wait之内。在子进程上sem_wait之前发生的任何事情都可以正常打印。但是,sem_wait之后的printf()将永远不会打印。从来没有。

我已经呆了几个小时,看不到我的问题。谁能伸出援手?谢谢。

最佳答案

我认为该行为是由先前运行时缺少sem_close()引起的。
只要确保您正确关闭了信号量,以便将来运行,就可以正确分配信号量的起始值,并且sem_wait()应该可以正常工作。

10-07 18:33