【发布时间】:2009-05-16 01:29:57
【问题描述】:
我有一些非常基本的信号量代码,它们在 Linux 上运行良好,但我一辈子都无法让它在 OS X 上正常运行...它返回最奇怪的结果...
#include <iostream>
#include <fcntl.h>
#include <stdio.h>
#include <semaphore.h>
int main()
{
sem_t* test;
test = sem_open("test", O_CREAT, 0, 1);
int value;
sem_getvalue(test, &value);
printf("Semaphore initialized to %d\n", value);
}
在 OS X 上使用 g++ 编译它会返回以下输出:
iQudsi:Desktop mqudsi$ g++ test.cpp
iQudsi:Desktop mqudsi$ ./a.out
Semaphore initialized to -1881139893
而在 Ubuntu 上,我得到的结果显然更加理智:
iQudsi: Desktop mqudsi$ g++ test.cpp -lrt
iQudsi:Desktop mqudsi$ ./a.out
Semaphore initialized to 1
我已经连续研究了 3 个小时,无法弄清楚为什么 OS X 会返回如此奇怪的结果...
我尝试使用文件路径作为信号量名称,但没有任何区别。
如果能得到任何帮助,我将不胜感激。
【问题讨论】:
标签: c++ macos posix mutex semaphore