デッドロック:2つに意味又はによるリソースの競合またはAブロッキング現象に実装プロセスにおいてつ以上のスレッドが、により互いに通信引き起こさ外力なしに、彼らはそれを促進することができません。この時点で、システムがデッドロック状態やデッドロックと呼ばれる別のプロセスを待っているの過程で常にデッドロックを生成するためのシステムであると言います。
なぜなら、メインスレッドが終了し、最終的にので、お互いのミューテックスのための待機中に待機し、各サブスレッドの終わりのこのプログラムの2つのスレッドが、そのプログラムを終了します。
1 インポートスレッディング 2 インポート時間 3。 4。 クラス(threading.Threadの)MyThread1: 5 DEF RUN(自己): 6 #mutexAロックの 7 mutexA.acquire() 。8 。9 #mutexAがロック、別の1秒の遅延、その待機スレッド、ロックmutexB 10 プリント(self.name + ' ---- DO1 ---- ---アップ' ) 。11 time.sleep(1 ) 12は、 13である 。#これはさらにmutexAされているので、ケース詰まっロック・スレッドのプリエンプション 14 mutexB.acquire() 15 印刷(self.name + "ダウンDO2 --- ---- ---- ' ) 16 mutexB.release() 。17 18である #mutexAロック解除の 19 mutexA.release() 20は 21である クラスthreading.ThreadのMyThread2(): 22である DEF RUN(自己): 23 #mutexAロックの 24 mutexB.acquire() 25 26である #1秒の遅延、他のスレッド待ち、ロックmutexB、mutexAロック 27 プリント(self.name + ' ---- --- DO1 UP- --- ' ) 28 time.sleep(1 ) 29 30 #詰まりこのとき、このmutexA別のスレッドがプリエンプティブにロックされているので 31 mutexA.acquire() 32 プリント(self.name + ' ---- DO2 ---ダウン---- ' ) 33 mutexA.release() 34 35 #对mutexB解锁 36 mutexB.release() 37 38 39 もし __name__ == ' __main__ ' : 40 mutexA = threading.Lock() 41 mutexB = threading.Lock() 42 、T1 = MyThread1() 43 、T2 = MyThread2() 44 t1.start() 45 t2.start() 46
避けデッドロック:1. 2.タイムアウトの様々なアルゴリズムを追加します