gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:40:06 26 4
gpt4 key购买 nike

我有一些非常基本的信号量代码,在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com