sem_init en OS X

Estoy trabajando en algún código que use las bibliotecas pthread y semáforo. La función sem_init funciona bien en mi máquina Ubuntu, pero en OS X la función sem_init no tiene ningún efecto. ¿Hay algún problema con la biblioteca o hay una forma diferente de hacerlo? Este es el código que estoy usando para probar.

 sem_t sem1; sem_t sem2; sem_t sem3; sem_t sem4; sem_t sem5; sem_t sem6; sem_init(&sem1, 1, 1); sem_init(&sem2, 1, 2); sem_init(&sem3, 1, 3); sem_init(&sem4, 1, 4); sem_init(&sem5, 1, 5); sem_init(&sem6, 1, 6); 

Los valores parecen ser números aleatorios, y no cambian después de la llamada sem_init .

Los semáforos sin nombre no son compatibles, es necesario utilizar semáforos con nombre.

Para usar semáforos con nombre en lugar de semáforos sin nombre, use sem_open lugar de sem_init , y use sem_close y sem_unlink lugar de sem_destroy .

Una mejor solución (en estos días) que los semáforos nombrados en OS X es dispatch_semaphore_t de Grand Central Dispatch. Funciona muy parecido a los semáforos POSIX sin nombre.

Inicializa el semáforo:

 #include  dispatch_semaphore_t semaphore; semaphore = dispatch_semaphore_create(1); // init with value of 1 

Espera y publica (señal):

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

Destruir:

 dispatch_release(semaphore); 

El archivo de encabezado está bien documentado y lo encontré bastante fácil de usar.