线程同步思考 - Condition模块

Comments(4)


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

前一篇: tornado长连接断开的处理机制 后一篇: 更改linux栈空间大小

Captcha:
验证码

Email:

Content: (Support Markdown Syntax)


E8KCBXqNHh  2016-12-30 05:33:54 From 188.143.232.32

Whoa, whoa, get out the way with that good inionmatfor.


oEO5otkN1NLv  2017-01-02 05:13:10 From 188.143.232.32

You saved me a lot of haslse just now.


g2HEWaZ4a  2017-01-04 11:37:45 From 188.143.232.32

car insurance quote barclays dairyland auto ins auto owners insurance leslie mi problems with rac car insurance the cost of vyvanse without insurance


sIxFgcpkgwvb  2017-01-06 09:13:02 From 188.143.232.27

http://wendyandrobbie.com/cheapest-car-insurance-quote-for-18-year-old.html http://mfoxpaint.com/cheap-car-insurance-for-suspended-drivers.html http://wendyandrobbie.com/lloyds-tsb-car-insurance-free-phone-number.html