我正在研究一個「學生」線程將使用信號量喚醒「TA」線程的項目。sem_wait()似乎沒有真正在等待。我可能會做錯什麼?
我有一個名爲旗語studentNeedsHelp_Sem
我sem_init(&studentNeedsHelp_Sem, 0 ,0);
初始化我的任何學生或TA線程甚至創建之前,我包括這3條線:
printf("DEBUG WAITING\n");
sem_wait(&studentNeedsHelp_Sem);
printf("DEBUG DONE WAITING\n");
什麼應發生:打印DEBUG WAITING
,那麼我們必須等到學生真的需要幫助(並撥打sem_post(&studentNeedsHelp_Sem)
)才能看到DEBUG DONE WAITING
什麼是發生:在我的學生線程開始之前都會打印出來。
(我用C工作OSX,使用POSIX並行線程)
謝謝您的幫助!
'studentNeedsHelp_Sem'在哪裏申報?它沒有機會離開,是嗎? –
@MartinJames在文件中通過'sem_t studentNeedsHelp_Sem;' –
在全局很早就聲明瞭,好吧,我不得不問,信號正常,好吧,工作;) –