在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_close
和sem_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);
头文件是有据可查的,我发现它很容易使用。