我的工作,它使用的并行线程和信号灯库一些代码。 该sem_init
函数工作正常,我的Ubuntu的机器上,但在OS X上的sem_init
函数完全没有影响。 是不是有什么毛病库还是有做不同的方式? 这是我使用的测试代码。
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
。
一个更好的解决(这些天)比OS X命名信号是大中央调度的dispatch_semaphore_t。 它的工作原理非常像无名POSIX信号量。
初始化信号:
#include <dispatch/dispatch.h>
dispatch_semaphore_t semaphore;
semaphore = dispatch_semaphore_create(1); // init with value of 1
等待和后期(信号):
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
...
dispatch_semaphore_signal(semaphore);
破坏:
dispatch_release(semaphore);
头文件是有据可查的,我发现它很容易使用。