c++ - OS X 上的奇怪/不正确的 sem_getvalue 信号量行为

标签 c++ macos posix mutex semaphore

我有一些非常基本的信号量代码,在 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 会返回如此奇怪的结果...

我试过使用文件路径作为信号量名称,但没有任何区别。

如果能得到任何帮助,我将不胜感激。

最佳答案

您是否正在测试错误?尝试:

#include <iostream>
#include <fcntl.h>
#include <stdio.h>
#include <semaphore.h>

int main()
{
    sem_t* test;
    test = sem_open("test", O_CREAT, 0, 1);
    if (test == SEM_FAILED) {
        perror("sem_open");
        return 1;
    }

    int value;
    if (sem_getvalue(test, &value)) {
        perror("sem_getvalue");
        return 1;
    }
    printf("Semaphore initialized to %d\n", value);
}

关于c++ - OS X 上的奇怪/不正确的 sem_getvalue 信号量行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/871435/

相关文章:

c++ - 1>main.obj : error LNK2001: unresolved external symbol _D3D10CreateDeviceAndSwapChain@32

c++ - Resource.rc 文件中返回多个资源

c++ - C++ 函数中 "return"的确切时刻

macos - 使用选项卡时 NSTextView 过早换行

objective-c - 关于Xcodebuild设置的其他困惑(64/32位,SDK版本等)

c - 主/工作线程和信号处理

C# Hashtable 与 C++ hash_map

html - Calibri 字体在 Mac 和 Windows 上输入的字框高度不同

linux - sleep() 是否通过在等待结束时发送一些信号来唤醒进程?

控制下面程序中 if(fork()==0) 后的下一条语句