2014-09-29 213 views
0

我在信号量方面遇到了一些非常基本的麻烦。C++中的信号量

#include <iostream> 
using namespace std; 
#include <semaphore.h> 
int main() { 
    sem_t sem; 
    sem_init(&sem, 1, 1); 
    sem_wait(&sem); 
    sem_wait(&sem); 
    printf("Return value: %d\n", sem_wait(&sem)); 
    return 0; 
} 

我期待这段代码永远等待(由于第二个sem_wait)。 而是打印出“返回值:-1”,然后退出。 我在Mac上使用g ++版本4.2.1进行编译(OSX 10.8.5)。

+0

您的代码在我的电脑上工作。带有内核3.2.0的Ubuntu 12.04 64bit,libc-2.15 – 2014-09-29 01:21:28

+1

这篇文章说OS/X不支持未命名的POSIX信号量:http://lists.apple.com/archives/darwin-kernel/2009/Apr/msg00010。 html – jsp 2014-09-29 01:38:06

+0

所以我应该使用sem_open()而不是sem_init()? – jbzdarkid 2014-09-29 01:40:54

回答

1

OS/X不支持未命名的POSIX信号量。使用sem_open()而不是sem_init()。