python3 執行緒死鎖

2022-02-01 06:54:22 字數 1979 閱讀 7680

所謂死鎖:是指兩個或兩個以上的程序或執行緒在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序,如下就是死鎖

code

from

threading import thread,lock

import time

mutexa=lock()

mutexb=lock()

class

mythread(thread):

def run(self):

self.func1()

self.func2()

def func1(self):

mutexa.acquire()

print(

'\033[41m%s 拿到a鎖\033[0m

' %self.name)

mutexb.acquire()

print(

'\033[42m%s 拿到b鎖\033[0m

' %self.name)

mutexb.release()

print(

'\033[42m%s 解b鎖\033[0m

' %self.name)

mutexa.release()

print(

'\033[42m%s 解a鎖\033[0m

' %self.name)

def func2(self):

mutexb.acquire()

print(

'\033[43m%s 拿到b鎖\033[0m

' %self.name)

time.sleep(2)

mutexa.acquire()

print(

'\033[44m%s 拿到a鎖\033[0m

' %self.name)

mutexa.release()

print(

'\033[42m%s 解a鎖\033[0m

' %self.name)

mutexb.release()

print(

'\033[42m%s 解b鎖\033[0m

' %self.name)

if __name__ == '

__main__':

for i in range(10

): t=mythread()

t.start()

outputs

macname@macdemacbook-pro py %python3 cccccc.py

thread-1

拿到a鎖

thread-1

拿到b鎖

thread-1

解b鎖thread-1

解a鎖thread-1

拿到b鎖

thread-2

拿到a鎖

^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 %

執行緒1拿到a以及b後,再次釋放

接下來,由於執行緒2搶到了a鎖,執行緒1搶到了b鎖

相互等待,兩個執行緒都無法繼續執行 

python3 死鎖 and 遞迴鎖

目錄 死鎖 兩個或兩個以上的程序或執行緒,在執行過程中,因搶奪資源而造成的相互無解等待的現象。遞迴鎖 在python中支援在同一執行緒中多次請求同一資源。rlock模組 遞迴鎖的實現模組,用來防止死鎖問題出現 死鎖程序 產生了死鎖現象的程序。例如 from threading import thre...

Python3多執行緒

學習python執行緒 python3 執行緒中常用的兩個模組為 thread threading 推薦使用 thread 模組已被廢棄。使用者可以使用 threading 模組代替。所以,在 python3 中不能再使用 thread 模組。為了相容性,python3 將 thread 重新命名為...

python3 多執行緒

多執行緒簡介 執行緒 thread 也稱輕量級程序,時作業系統能夠進行運算排程的最小單位,它被包涵在程序之中,時程序中的實際運作單位。執行緒自身不擁有資源,只擁有一些在執行中必不可少的資源,但他可與同屬乙個程序的其他執行緒共享程序所擁有的全部資源。乙個執行緒可以建立和撤銷另乙個執行緒,同一程序中的多...