C++ Macs OS X semaphore.h:“sem_open()”和“sem_wait()”出现问题

Mat*_*son 0 c++ macos semaphore

#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 << "\ndone\n";
}
Run Code Online (Sandbox Code Playgroud)

这段代码甚至不应该通过第一个sem_wait(),但在我的系统上它到达了main(). 我读过的所有内容,例如这里这里,都说,虽然Mac OS X不支持sem_init(),但它确实支持sem_open()。然而,sem_open()按照上面的使用方法并没有解决问题。我运行的是 OS X 10.5.7。

Mic*_*ker 5

尝试放在sem_unlink("x");之前sem_open(),我确信这不是您第一次尝试。模式 0 不会让你用它做太多事情,除非你删除它。另外,请检查您的呼叫是否有错误,如果不能解决,它会解决,但至少会修改您的问题。

  • 是的,它确实持续存在。问题不在于“O_CREAT”标志,如果信号量不存在,它应该创建信号量(与“O_EXCL”不同,如果信号量存在,它应该使其失败)。问题是信号量存在并限制所有类型的访问(模式为 0)。这就是为什么您需要首先取消链接。 (2认同)