8.Pythonネットワークプログラミング_マルチスレッドのデッドロック

デッドロック: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.タイムアウトの様々なアルゴリズムを追加します

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/NiBosS/p/11963476.html