我學習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!然後出現線程安全的話題。 –