sem init на OS X
Я работаю над некоторым кодом, который использует библиотеки pthread и semaphore. Элемент sem_init
функция отлично работает на моей машине Ubuntu, но на OS X
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);
заголовочный файл хорошо документирован, и я нашел его очень проста в использовании.