2013-02-23 112 views
0

我有一个进程产生几个子进程。他们都共享一个信号量。sem_wait无法继续

在我的主程序中。

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()将永远不会打印。一次也没有。

我一直在它几个小时,我看不到我的问题。任何人都可以伸出援手吗?谢谢。

+1

信号量是否被初始化(sem_init)?由于信号量值为零,所以sem_wait()调用被阻塞。 – suspectus 2013-02-23 23:05:25

+0

如果我删除sem_posit,sem_post之后的任何内容都不会打印。似乎任何sem_函数都会阻塞。 – user1305850 2013-02-23 23:10:36

+0

您是否检查过sem_open()调用是否成功? – suspectus 2013-02-23 23:16:39

回答

0

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