华子的代码空间

逆水行舟,不进则退。 关注系统编程、网络编程、并发、分布式。

线程同步思考 - Condition模块

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(),它就不管了(最多只报错).

 

posted on 2013-05-08 17:38  华子的代码空间  阅读(283)  评论(0编辑  收藏  举报

导航