我学习Python的线程与http://www.python-course.eu/threads.php 这段代码的解释帮助处理确实让我困惑:线程为什么会进入睡眠状态?
from thread import start_new_thread
num_threads = 0
def heron(a):
global num_threads
num_threads += 1
# code has been left out, see above(some operations)
num_threads -= 1
return new
start_new_thread(heron,(99,))
start_new_thread(heron,(999,))
start_new_thread(heron,(1733,))
start_new_thread(heron,(17334,))
while num_threads > 0:
pass
代码:
num_threads += 1
读取num_thread的价值
新的int实例会增加或减少1(我认为会创建一个新的int对象)
分配新值NUM_THREADS
象这样的错误发生在增量分配的情况下:
第一个线程读取变量NUM_THREADS,仍然具有值0 这里谈到的是困惑:读取此值后,线程将被操作系统置入睡眠状态。现在轮到第二个线程:它还读取变量num_threads的值,该变量仍然为0,因为第一个线程已经过早睡眠了,也就是在它能够将其值增加1之前。现在,第二个线程进入睡眠状态。现在轮到了第三个线程,它再次读取一个0,但现在计数器应该是2。这些线程中的每个线程现在将值1分配给计数器。减量操作会发生类似的问题。
Thks!然后出现线程安全的话题。 –