C++ C++;Macs OS X semaphore.h:sem_open()和sem_wait()有问题` #包括 sem_t*x; int main() { x=sem_open(“x”,O_CREAT,0,0);; sem_wait(x);sem_wait(x);sem_wait(x); std::cout

C++ C++;Macs OS X semaphore.h:sem_open()和sem_wait()有问题` #包括 sem_t*x; int main() { x=sem_open(“x”,O_CREAT,0,0);; sem_wait(x);sem_wait(x);sem_wait(x); std::cout,c++,macos,semaphore,C++,Macos,Semaphore,在sem\u open()之前尝试放置sem\u unlink(“x”),我确信这不是您第一次尝试。0模式不会让您对它做太多操作,除非您删除它。此外,请检查您的调用是否有错误,如果没有解决,至少会修改您的问题。尝试放置sem\u unlink(“x”)sem_open()之前,我相信这不是你第一次尝试它。0的模式不会让你对它做太多的事情,除非你删除它。另外,一定要检查你的调用是否有错误,如果没有解决,它会解决,但至少要修改你的问题。0到sem\u open的权限意味着没有人可以访问信号量。你真

sem\u open()
之前尝试放置
sem\u unlink(“x”)
,我确信这不是您第一次尝试。0模式不会让您对它做太多操作,除非您删除它。此外,请检查您的调用是否有错误,如果没有解决,至少会修改您的问题。

尝试放置
sem\u unlink(“x”)
sem_open()之前,我相信这不是你第一次尝试它。0的模式不会让你对它做太多的事情,除非你删除它。另外,一定要检查你的调用是否有错误,如果没有解决,它会解决,但至少要修改你的问题。

0到
sem\u open
的权限意味着没有人可以访问信号量。你真的应该添加正确的错误检查king——它会告诉你哪个函数失败了,以及如何操作。

0到
sem\u open
的权限意味着没有人可以访问信号量。你真的应该添加正确的错误检查——它会告诉你哪个函数失败了,以及如何操作。

你需要检查
sem\u open
的返回值。如果
sem\u失败了
您需要查看
errno
。您需要检查
sem\u open
的返回值。如果
sem\u失败
,您需要查看
errno
。如果我想让调用进程不受限制地访问,我应该将其设置为什么模式?我也是:)虽然不确定,这是关于调用进程的,但尽可能接近如果我想给调用进程不受限制的访问权限,我应该将其设置为什么模式?我也是:)虽然不确定,但这是关于调用进程的,但要尽可能接近。
sem\u unlink(“x”)
成功了。这是否意味着命名的信号量在调用过程结束后仍然存在,除非它显式取消链接,从而导致
O_create
由于信号量已经存在而失败?但实际上我仍然不太明白这将如何解释该行为。是的,它仍然存在。问题不是e> O_createflag,如果信号量不存在,它应该创建信号量(不像
O_EXCL
,如果信号量存在,它应该使信号量失败)。问题是信号量存在并限制所有类型的访问(模式为0)。这就是为什么你需要首先取消它的链接。Kewl,就是这样!非常感谢。
sem_unlink(“x”)
成功了。这是否意味着命名的信号量在调用过程结束后仍然存在,除非它显式取消链接,从而导致
O_create
由于信号量已经存在而失败?但实际上我仍然不太明白这将如何解释该行为。是的,它仍然存在。问题不是e> O_createflag,如果信号量不存在,它应该创建信号量(不像
O_EXCL
,如果信号量存在,它应该使信号量失败)。问题是信号量存在并限制所有类型的访问(模式为0)。这就是为什么您需要首先取消链接。Kewl,就是这样!非常感谢。
#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";
}