c++ mac OS X semaphore.h: ' sem_open() '和' sem_wait() '的
C++ Macs OS X semaphore.h: trouble with `sem_open()` and `sem_wait()`
#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
表示没有人可以访问该信号量。你真的应该添加适当的错误检查——它会告诉你哪个函数失败了,以及失败的方式。