0
我被馬克·魯茨學習編程的Python多線程內反映,並遇到了下面的例子:變量是一個線程更新,但更新後的值不循環
import _thread as thread
stdoutmutex = thread.allocate_lock()
exitmutexes = [thread.allocate_lock() for i in range(5)]
def counter(myId, count):
for i in range(count):
stdoutmutex.acquire()
print('[%s] => %s' % (myId, i))
stdoutmutex.release()
exitmutexes[myId].acquire()
for i in range(5):
thread.start_new_thread(counter, (i, 20))
for mutex in exitmutexes:
while not mutex.locked(): pass
print('Main thread exiting.')
上面的代碼工作正常。它爲每個子線程使用互斥鎖並將它們粘貼到全局的exitmutexes
列表中。退出時,每個線程通過打開其鎖定信號通知主線程。
我想我可以使用一般布爾標誌而不是allocate_lock()
。所以我已經將上面的代碼修改爲:
import _thread as thread
stdoutmutex = thread.allocate_lock()
exitmutexes = [False for i in range(5)]
def counter(myId, count):
for i in range(count):
stdoutmutex.acquire()
print('[%s] => %s' % (myId, i))
stdoutmutex.release()
exitmutexes[myId] = True
for i in range(5):
thread.start_new_thread(counter, (i, 20))
for mutex in exitmutexes:
while not mutex: print(exitmutexes)
print('Main thread exiting.')
我的版本不起作用。它只是循環而過。爲什麼簡單的布爾標誌在這裏不起作用?謝謝。
'而不是mutex'不重讀列表條目。 – user2357112