python3 典型死鎖問題 科學家吃麵

2022-02-01 06:54:23 字數 1482 閱讀 2325

code

import time

from

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表示。...