【问题标题】:Can a thread waiting on a condititionable variable be woken up by a signal emitted before he was waiting等待条件变量的线程是否可以被在等待之前发出的信号唤醒
【发布时间】:2019-09-27 12:43:47
【问题描述】:

t 等待之前,一个线程t 等待条件变量cond 是否有可能被另一个线程t'(其中t' 实际上可能是t)唤醒?

我已经尝试制作一个 C 程序来执行此操作 1000 次,但它从未发生过,我还阅读了有关信号和等待的手册页,但我找不到答案。

这是一个单线程上的示例

pthread_cond_signal(&cond);
pthread_cond_wait(&cond, &mutex); //Is there a chance that this wait gets cancelled by the signal above

感谢您的帮助!

【问题讨论】:

    标签: c multithreading pthreads conditional


    【解决方案1】:

    在条件变量上等待的线程能否被在等待之前发出的信号唤醒。

    不能。但是,它可以被spurious wakeup 唤醒,并且不会知道其中的区别。

    等待代码必须等待共享状态的变化,条件变量wakeup提示共享状态可能已经改变,必须重新评估。

    【讨论】:

      【解决方案2】:

      没有。如果没有其他线程在等待,...signal(&cond) 函数根本不做任何事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-09
        • 1970-01-01
        • 2013-10-02
        相关资源
        最近更新 更多