线程同步思考 - 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(),它就不管了(最多只报错).