code
import timefrom
threading import thread,lock
noodle_lock =lock()
fork_lock =lock()
def eat1(name):
noodle_lock.acquire()
print(
'%s 搶到了麵條
'%name)
fork_lock.acquire()
print(
'%s 搶到了叉子
'%name)
print(
'%s 吃麵
'%name)
fork_lock.release()
noodle_lock.release()
def eat2(name):
fork_lock.acquire()
print(
'%s 搶到了叉子
' %name)
time.sleep(1)
noodle_lock.acquire()
print(
'%s 搶到了麵條
' %name)
print(
'%s 吃麵
' %name)
noodle_lock.release()
fork_lock.release()
for name in ['
哪吒','
nick
','tank']:
t1 = thread(target=eat1,args=(name,))
t2 = thread(target=eat2,args=(name,))
t1.start()
t2.start()
outputs
macname@macdemacbook-pro py %python3 cccccc.py哪吒 搶到了麵條
哪吒 搶到了叉子
哪吒 吃麵
哪吒 搶到了叉子
nick 搶到了麵條
^cexception ignored in: '
threading
'from
'/library/frameworks/python.framework/versions/3.7/lib/python3.7/threading.py
'>traceback (most recent call last):
file
"/library/frameworks/python.framework/versions/3.7/lib/python3.7/threading.py
", line 1308, in
_shutdown
lock
.acquire()
keyboardinterrupt
macname@macdemacbook-pro py %
python3 執行緒死鎖
所謂死鎖 是指兩個或兩個以上的程序或執行緒在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序,如下就是死鎖 code from threading import thread,lock ...
python3 死鎖 and 遞迴鎖
目錄 死鎖 兩個或兩個以上的程序或執行緒,在執行過程中,因搶奪資源而造成的相互無解等待的現象。遞迴鎖 在python中支援在同一執行緒中多次請求同一資源。rlock模組 遞迴鎖的實現模組,用來防止死鎖問題出現 死鎖程序 產生了死鎖現象的程序。例如 from threading import thre...
Python3編碼問題
python3最重要的進步之一就是解決了python2中字串與字元編碼的問題。python2字串的缺陷如下 而python3則把系統預設編碼設定為了 utf 8 import sys sys.getdefaultencoding utf 8 之後,文字字元和二進位制資料分別用str和bytes表示。...