dsp*_*pyz 5 python multithreading race-condition
在http://docs.python.org/2/library/threading.html#thread-objects的python文档中,它说
[isAlive()]在run()方法启动之前返回True,直到run()方法终止之后
但是然后start()方法说:
[start()]安排在单独的控制线程中调用对象的run()方法.
这是否意味着如果我打电话t.start()然后立即检查t.isAlive()它可能我得到False因为线程还没有开始?
它不可能发生,至少在CPython的实现中不会发生.这来自于盯着代码Thread.start(这里来自Python 3源代码,但没关系):
def start(self):
...
try:
_start_new_thread(self._bootstrap, ())
except Exception:
with _active_limbo_lock:
del _limbo[self]
raise
self._started.wait()
Run Code Online (Sandbox Code Playgroud)
_start_new_thread()在C中实现,启动一个新线程并self._bootstrap()在该新线程内运行. self._bootstrap()反过来调用self.run().如果这就是全部,那么调用线程确实可以在run()开始执行之前返回任意数量的时间.但是:
self._started.wait()
Run Code Online (Sandbox Code Playgroud)
在内部的结束块Event.引导代码_started Event在调用之前不久设置run(),并且同一事件的状态是主要的事情isAlive().