我有一个过程会产生一些子进程。他们都共享一个信号量。
在我的主程序中。
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()将永远不会打印。甚至没有一次。
我已经在那里待了几个小时,我看不出我的问题。任何人都可以伸出援手吗?感谢。
答案 0 :(得分:0)
我认为这种行为是由于先前运行中缺少sem_close()引起的。 只需确保正确关闭信号量,以便在将来运行时正确分配信号量的起始值,并且sem_wait()应该有效。