Nip*_*rus 54 c macos semaphore pthreads
我正在研究一些使用pthread和信号量库的代码.该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);
Run Code Online (Sandbox Code Playgroud)
值似乎是随机数,并且在sem_init
调用后它们不会更改.
Nip*_*rus 87
不支持未命名的信号量,您需要使用命名信号量.
要使用命名信号量而不是未命名的信号量,请使用sem_open
而不是sem_init
使用sem_close
和sem_unlink
代替sem_destroy
.
Jes*_*ers 18
比OS X上的命名信号量更好的解决方案(目前)是Grand Central Dispatch的dispatch_semaphore_t.它的工作原理与未命名的POSIX信号量非常相似.
初始化信号量:
#include <dispatch/dispatch.h>
dispatch_semaphore_t semaphore;
semaphore = dispatch_semaphore_create(1); // init with value of 1
Run Code Online (Sandbox Code Playgroud)
等待和发布(信号):
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
...
dispatch_semaphore_signal(semaphore);
Run Code Online (Sandbox Code Playgroud)
破坏:
dispatch_release(semaphore);
Run Code Online (Sandbox Code Playgroud)
头文件已有详细记录,我发现它很容易使用.
归档时间: |
|
查看次数: |
27304 次 |
最近记录: |