找到归档 2013-05 的文章 1 篇.


线程同步思考 - Condition模块

Posted on 2013-05-08 17:38:07 python

1. python的threading模块的Condition类提供了通过条件变量保持多个线程间同步. 一个线程阻塞,等待从其他线程获取通知。
2. 假设有两个线程A和B,线程A首先执行wait(),线程B再执行notify()。线程A从Condition对象上得到通知,wait()函数获取到锁,往下继续执行。
3. 此时线程B再次执行notify(),但此时线程A正在运行wait()之后的代码,没有执行wait()。线程B执行的notify(),会是怎样的结果?

根据查看代码和文档,猜测可能会有以下结果:

线程B报错,没有waiter(这是从源码中看到的)。

如何解决?

1. 线程A的wait()后面的代码应尽快执行完毕,让线程A尽快在下个循环中进入wait()等待。
2. 根据实际业务需求,线程B应尽量避免没有线程在wait()的时候,执行notify()。

这么看来,还是后面这个方法靠谱一些。 Condition类的notify()只管通知,至于有没有线程在wait(),它就不管了(最多只报错).