C ++ Macs OS X semaphore.h:`sem_open()`和`sem_wait()的问题

时间:2011-11-09 10:27:24

标签: 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";
}

此代码甚至不应传递第一个sem_wait(),但在我的系统上它会到达main()的末尾。我读过的所有内容(例如herehere)都说,虽然Mac OS X不支持sem_init(),但它确实支持sem_open()。但是,如上所述使用sem_open()并未解决问题。我正在运行OS X 10.5.7。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

0到sem_open的权限意味着没有人可以访问信号量。你真的应该添加适当的错误检查 - 它会告诉你哪个功能失败了。