c++ mac OS X semaphore.h: ' sem_open() '和' sem_wait() '的

C++ Macs OS X semaphore.h: trouble with `sem_open()` and `sem_wait()`

本文关键字:sem semaphore wait open c++ mac OS      更新时间:2023-10-16
#include <semaphore.h>
sem_t* x;
int main () 
{
    x = sem_open("x", O_CREAT, 0, 0);;
    sem_wait(x); sem_wait(x); sem_wait(x);
    std::cout << "ndonen";
}

这段代码甚至不应该通过第一个sem_wait(),但在我的系统上它到达了main()的末尾。我读过的所有东西,比如这里和这里,都说,虽然Mac OS X不支持sem_init(),但它支持sem_open()。然而,使用sem_open()如上所述并没有解决这个问题。我使用的是OS X 10.5.7.

试着把sem_unlink("x");放在sem_open()之前,我敢肯定这不是你第一次尝试。mode(0)不会让你对它做太多的处理,除非你把它去掉。另外,一定要检查调用中的错误,如果不能解决,但至少可以修改您的问题。

权限为0到sem_open表示没有人可以访问该信号量。你真的应该添加适当的错误检查——它会告诉你哪个函数失败了,以及失败的方式。