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