2014-09-29 154 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()。