#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()
的末尾。我读过的所有内容(例如here和here)都说,虽然Mac OS X不支持sem_init()
,但它确实支持sem_open()
。但是,如上所述使用sem_open()
并未解决问题。我正在运行OS X 10.5.7。
答案 0 :(得分:3)
尝试将sem_unlink("x");
放在sem_open()
之前,我确定这不是你第一次尝试它。 0模式不会让你做很多事情,除非你删除它。另外,请检查您的呼叫是否有错误,如果不能解决,但至少要修改您的问题。
答案 1 :(得分:1)
0到sem_open
的权限意味着没有人可以访问信号量。你真的应该添加适当的错误检查 - 它会告诉你哪个功能失败了。