C ++ Macs OS X semaphore.h: проблема с `sem_open ()` и `sem_wait ()` - PullRequest
0 голосов
/ 09 ноября 2011
#include <semaphore.h>

sem_t* x;

int main () 
{
    x = sem_open("x", O_CREAT, 0, 0);;
    sem_wait(x); sem_wait(x); sem_wait(x);
    std::cout << "\ndone\n";
}

Этот код не должен даже проходить первый sem_wait(), но в моей системе он достигает конца main(). Все, что я прочитал, например здесь и здесь , говорит о том, что хотя Mac OS X не поддерживает sem_init(), оно поддерживает sem_open(). Однако использование sem_open(), как указано выше, не устранило проблему. Я использую OS X 10.5.7.

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

Попробуйте поставить sem_unlink("x"); перед sem_open(), я уверен, что это не первая ваша попытка. И режим 0 не позволит вам сделать с ним многое, если вы не удалите его. Кроме того, проверяйте свои звонки на наличие ошибок, если они не разрешатся, но, по крайней мере, исправьте свои вопросы.

1 голос
/ 09 ноября 2011

Разрешения от 0 до sem_open означают, что никто не может получить доступ к семафору. Вы действительно должны добавить правильную проверку ошибок - она ​​сообщит вам, какая функция не работает и каким образом.

...