我正在阅读AS TANENBAUM的书“现代操作系统”,它给出了一个解释条件变量的例子,如下所示。它看起来有一个僵局,不知道我错过了什么。
让我们先假设使用者线程启动。在 the_mutex 被锁定后,使用者线程被阻塞,等待条件变量 condc 。
如果 producer 此时正在运行, the_mutex 仍将被锁定,因为使用者永远不会释放它。所以 producer 也将被阻止。
这给我看了一本教科书死锁问题。我在这里错过了什么吗? THX
> head(temp, 10)
variable value XIST
1 pos_A1 0.00000 pos
2 pos_A1 0.00000 pos
3 pos_A1 0.00000 pos
4 pos_A1 0.00000 pos
5 pos_A1 0.00000 pos
6 pos_A1 15.66911 pos
7 pos_A1 0.00000 pos
8 pos_A1 0.00000 pos
9 pos_A1 0.00000 pos
10 pos_A1 0.00000 pos
> tail(temp, 10)
variable value XIST
210999 neg_H9 0.000000 neg
211000 neg_H9 0.000000 neg
211001 neg_H9 0.000000 neg
211002 neg_H9 0.000000 neg
211003 neg_H9 0.000000 neg
211004 neg_H9 4.466276 neg
211005 neg_H9 0.000000 neg
211006 neg_H9 0.000000 neg
211007 neg_H9 0.000000 neg
211008 neg_H9 30.033764 neg
答案 0 :(得分:3)
当您等待条件变量时,相关的互斥锁会在等待期间释放(这就是您将互斥锁传递给pthread_cond_wait的原因)。
当pthread_cond_wait返回时,互斥锁总是再次被锁定。
记住这一点,你可以遵循这个例子的逻辑。