程式設計時要盡量避免死鎖(銀行家演算法)

2021-08-19 08:16:26 字數 1072 閱讀 1215

import threading

import time

class

mythread1

(threading.thread):

defrun

(self):

# 對mutexa上鎖

mutexa.acquire()

# mutexa上鎖後,延時1秒,等待另外那個執行緒 把mutexb上鎖

print(self.name+'----do1---up----')

time.sleep(1)

# 此時會堵塞,因為這個mutexb已經被另外的執行緒搶先上鎖了

mutexb.acquire()

print(self.name+'----do1---down----')

mutexb.release()

# 對mutexa解鎖

mutexa.release()

class

mythread2

(threading.thread):

defrun

(self):

# 對mutexb上鎖

mutexb.acquire()

# mutexb上鎖後,延時1秒,等待另外那個執行緒 把mutexa上鎖

print(self.name+'----do2---up----')

time.sleep(1)

# 此時會堵塞,因為這個mutexa已經被另外的執行緒搶先上鎖了

mutexa.acquire()

print(self.name+'----do2---down----')

mutexa.release()

# 對mutexb解鎖

mutexb.release()

mutexa = threading.lock()

mutexb = threading.lock()

if __name__ == '__main__':

t1 = mythread1()

t2 = mythread2()

t1.start()

t2.start()

避免死鎖 銀行家演算法

了解了什麼是死鎖,以及死鎖產生的原因,懂得如何去避免死鎖。在前面 作業系統之 死鎖問題 已經提到。在死鎖的避免上有現今有兩種比較著名的方案,一是有序資源分配法,二是銀行家演算法。這裡講述一下銀行家演算法。銀行家演算法 banker s algorithm 是乙個避免死鎖 deadlock 的著名演算...

死鎖,銀行家演算法

我們知道作業系統中很多種資源,如cpu,記憶體,io裝置等,每種資源又有很多例項,對於這些資源,程序該如何訪問?請求 獲取 申請空閒資源 使用 占用 程序占用資源 釋放 資源狀態由占用變為空閒 為了更好的了解死鎖,我們將資源分類 1 預防死鎖。這是一種較簡單和直觀的事先預防的方法。方法是通過設定某些...

死鎖與銀行家演算法

死鎖定義 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。死鎖條件 1 互斥條件 指程序對所分配到的資源進行排它性使用,即在一段時間內某資源...