2013-02-23 107 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()應該可以正常工作。