【发布时间】:2015-10-09 04:40:17
【问题描述】:
我正在http://www.python-course.eu/threads.php 的帮助下学习 python 线程处理 这段代码的解释真的让我很困惑:
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 分配给计数器。减量操作也会出现类似的问题。
【问题讨论】:
标签: python multithreading operating-system