Я работаю над проектом, в котором «студенческая» нить будет использовать семафор, чтобы разбудить поток «TA».sem_wait(), похоже, действительно не ждет. Что я могу сделать неправильно?
У меня есть семафор под названием studentNeedsHelp_Sem
я инициализировать его с sem_init(&studentNeedsHelp_Sem, 0 ,0);
Перед любой из моих студентов или ТА нитей даже созданы, я включаю эти 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 Pthreads)
Благодарим Вас за помощь!
Где: 'studentNeedsHelp_Sem' указано? Нет шансов, что он уйдет, не так ли? –
@MartinJames Объявлен глобально очень рано в файле через строку 'sem_t studentNeedsHelp_Sem;' –
ОК, ну, я должен был спросить, семафоры нормально, ну, работа;) –