sem init на OS X


Я работаю над некоторым кодом, который использует библиотеки pthread и semaphore. Элемент sem_init функция отлично работает на моей машине Ubuntu, но на OS X

2 51

2 ответа:

безымянные семафоры не поддерживаются, необходимо использовать именованные семафоры.

чтобы использовать именованные семафоры вместо безымянных семафоров, используйте sem_open вместо sem_init, и использовать sem_close и sem_unlink вместо sem_destroy.

лучшее решение (этих дней), чем именованные семафоры на OS X является dispatch_semaphore_t Гранд Центральное диспетчерское по. Он очень много работает, как безымянный семафоры POSIX.

инициализировать семафор:

#include <dispatch/dispatch.h>
dispatch_semaphore_t semaphore;
semaphore = dispatch_semaphore_create(1); // init with value of 1

Wait & post (сигнал):

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
...
dispatch_semaphore_signal(semaphore);

уничтожить:

dispatch_release(semaphore);

заголовочный файл хорошо документирован, и я нашел его очень проста в использовании.