gpt4 book ai didi

c - sem_wait() 似乎并没有真正在等待。我可能做错了什么?

转载 作者:行者123 更新时间:2023-11-30 18:37:50 27 4
gpt4 key购买 nike

我正在开发一个项目,其中“学生”线程将使用信号量来唤醒“TA”线程。

我有一个名为 studentNeedsHelp_Sem 的信号量

我用 sem_init(&studentNeedsHelp_Sem, 0 ,0); 初始化它

在创建我的任何学生或助教线程之前,我会添加以下 3 行:

printf("DEBUG WAITING\n");
sem_wait(&studentNeedsHelp_Sem);
printf("DEBUG DONE WAITING\n");

应该发生什么:DEBUG WAITING打印出来,那么我们必须等到学生真正需要帮助(并调用 sem_post(&studentNeedsHelp_Sem) )才能看到 DEBUG DONE WAITING

发生了什么:两者都在我的学生线程开始之前打印出来。

(我在 OSX 上使用 C 语言工作,使用 POSIX pthreads)

感谢您的帮助!

最佳答案

检查sem_wait的返回值(正如您在调用库函数或系统调用时总是所做的那样)。它可能是负数,表明有错误;查看errno或使用perror来显示错误。如果它是 EDEADLK,我不会感到惊讶。

确实,如果没有启动任何线程,那么肯定没有人发布信号量。所以 sem_wait 根本不会返回。这是一个僵局;你的程序正在等待一些被证明永远不会发生的事情。 OSX 的线程库可能会检测到这一点,并让 sem_wait 返回并返回错误,假设这不是您想要的,并且至少如果 sem_wait 返回您的程序有机会恢复。

关于c - sem_wait() 似乎并没有真正在等待。我可能做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35777362/

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