互斥锁死锁,条件变量代码?

时间:2016-07-26 22:10:06

标签: multithreading mutex deadlock condition-variable

我正在阅读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

1 个答案:

答案 0 :(得分:3)

当您等待条件变量时,相关的互斥锁会在等待期间释放(这就是您将互斥锁传递给pthread_cond_wait的原因)。

当pthread_cond_wait返回时,互斥锁总是再次被锁定。

记住这一点,你可以遵循这个例子的逻辑。