>我有一个死锁的代码。我想到了如何解决它的一些解决方案,其中之一是以原子方式执行以下操作:
if(!ready)
pthread_cond_wait(&(cond[0]), &(lock[0]));
但是,我不确定是否可以在 pthreads 中原子地执行此操作,因为我在文档中找不到任何内容,也许可能有如何做到这一点的技巧。我不会解释代码的其余部分,因为我认为回答这个问题无关紧要。
谢谢。
它在修改ready
方面是原子的,因为互斥lock[0]
是保留的,并且必须围绕其他线程中ready
的所有修改进行。
请注意,您需要使用 while
而不是 if
,因为即使条件没有改变,等待也可能提前醒来。