在OS X上的sem_init

我正在使用pthread和semaphore库的一些代码。 sem_init函数在我的Ubuntu机器上工作正常,但在OS X上,sem_init函数完全没有影响。 图书馆有什么问题,或者有不同的方法吗? 这是我用来testing的代码。

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); 

这些值似乎是随机数,并且在sem_init调用之后它们不会更改。

未命名的信号量不受支持,您需要使用已命名的信号量。

要使用已命名的信号而不是未命名的信号量,请使用sem_open而不是sem_init ,并使用sem_closesem_unlink代替sem_destroy

Grand Central Dispatch的dispatch_semaphore_t比OS X上命名的信号量更好的解决scheme(最近)。 它非常类似于无名的POSIX信号量。

初始化信号量:

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

等待(post)(信号):

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

破坏:

 dispatch_release(semaphore); 

头文件是有据可查的,我发现它很容易使用。