如果条件在pthreads中原子地保持为真,是否可以执行cond_wait?

时间:2016-07-14 11:27:17

标签: c++ parallel-processing pthreads wait atomic

我有一个有死锁的代码。我想到了一些如何解决它的解决方案,其中之一就是原子地做下面的事情:

if(!ready)
    pthread_cond_wait(&(cond[0]), &(lock[0]));

但是,我不确定是否有可能在pthreads中以原子方式执行此操作,因为我在文档中找不到任何内容,也许可能有如何操作的技巧。我不会解释剩下的代码,因为我认为回答这个问题并不重要。

感谢。

1 个答案:

答案 0 :(得分:0)

关于ready的修改,它是原子的,因为互斥lock[0]被保留,并且必须保持在其他线程中对ready的所有修改。

请注意,您需要使用while而不是if,因为即使条件没有改变,等待也可能提前唤醒。