我正在研究一个“学生”线程将使用信号量唤醒“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;' –
在全局很早就声明了,好吧,我不得不问,信号正常,好吧,工作;) –