2016-04-27 4 views
2

Ich habe den folgenden Code:Semaphore immer wieder abstürzt auf OS X

sem_t *semFull = sem_open("/semFull", O_CREAT, 0644, 0); 
sem_t *semEmpty = sem_open("/semEmpty", O_CREAT, 0644, shared.buffSize); 

Dieses Stück Code perfekt auf Linux funktioniert, aber wenn ich versuche, es halten auf OS XI auszuführen Segmentation fault immer

Kann jemand Hilf mir, dieses Problem zu lösen?

Dank

Antwort

1

Sie nicht sem_t auf OS X, sollten Sie verwenden semaphore_t verwenden sollten.

Sie müssen die folgenden Bibliotheken

#include <mach/semaphore.h> 
#include <mach/task.h> 
#include <mach/mach_init.h> 

importieren Und Sie können Ihre Semaphore erstellen mit:

semaphore_create(mach_task_self(), &shared.full, SYNC_POLICY_FIFO, 0); 
semaphore_create(mach_task_self(), &shared.empty, SYNC_POLICY_FIFO, shared.buffSize); 

Ihr Problem gelöst werden sollte mit diesem Ansatz.

+0

Danke für Ihre Hilfe! Ich werde versuchen, den Code, den du mir gegeben hast, zu implementieren –