【问题标题】:semaphore unexpectedly getting set [duplicate]信号量意外设置[重复]
【发布时间】:2011-12-20 18:44:31
【问题描述】:

可能重复:
Interprocess semaphores sometimes not working as expected

在我的应用程序中,我注意到 sem_t 类型的信号量有时会在不执行 sem_post 的情况下从 0 变为 1。怎么会?什么会导致这种情况?信号量用于进程间通信,可以看代码here

【问题讨论】:

  • 哇,检查一下我注意到@MichaelBurr 已经回答了同样的问题。如果您能在提出后续问题之前先整合人们告诉您的内容,那就太好了。

标签: c linux gcc x86 semaphore


【解决方案1】:

您链接到的代码不会捕获来自sem_t 调用的返回值。如果您查看手册,您会看到例如 sem_wait 可以过早返回,即所谓的虚假唤醒。

始终检查这些函数的返回码。如果返回是-1,请检查errno 是否有相应的错误,并确定它是否是暂时性错误。如果是,请迭代。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多