如果条件在 pthreads 中原子地成立,是否可以执行cond_wait

Is it possible to perform a cond_wait if a condition holds true atomically in pthreads?

本文关键字:是否 执行 wait cond pthreads 条件 如果      更新时间:2023-10-16

>我有一个死锁的代码。我想到了如何解决它的一些解决方案,其中之一是以原子方式执行以下操作:

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

但是,我不确定是否可以在 pthreads 中原子地执行此操作,因为我在文档中找不到任何内容,也许可能有如何做到这一点的技巧。我不会解释代码的其余部分,因为我认为回答这个问题无关紧要。

谢谢。

它在修改ready方面是原子的,因为互斥lock[0]是保留的,并且必须围绕其他线程中ready的所有修改进行。

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