sem_init在OS X(sem_init on OS X)

2019-07-17 18:51发布

我的工作,它使用的并行线程和信号灯库一些代码。 该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调用。

Answer 1:

未命名信号不支持,你需要使用命名信号。

要使用命名信号,而不是无名信号量,使用sem_open代替sem_init ,并使用sem_closesem_unlink代替sem_destroy



Answer 2:

一个更好的解决(这些天)比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);

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



文章来源: sem_init on OS X