1.ミューテックス
インポート時 からスレッド輸入スレッド、ロック デフはfunc1(ロック): グローバルn個 lock.acquire() #のロック TEMP = N- time.sleep( 0.2 ) N- = TEMP -1 lock.release() #ロック解除 N- = 10 t_list = [] ロックは = ロック() のために私に範囲(10 ): T1 =スレッド(目標=関数func1、引数= (ロック)) t1.start() t_list.append(T1) 以下のための私でt_list: 参加する() プリント(N)
結果: 実行速度を犠牲にしますが、データのセキュリティを確保します。
2.再帰的ロック
スレッド輸入糸、RLOCK デフはfunc1(名): lock1.acquire() 印刷(' {}最初のキーを取得する!' .format(名前)) lock2.acquire() 印刷(' 2番目のキーを取得するには、{}!' .format(名)) を印刷(' {}が部屋入った' .format(名前を)) lock2.release() #の第2のキーの戻り lock1.release() #最初のキー戻り LOCK1 = RLOCK() #のロックを1 LOCK2 = RLOCK() #1 ロック2 用 I における範囲(10 ): スレッド(ターゲット =関数func1、引数=(I))。)(スタート
結果: 彼らはコードを実行する前に取得するために同じ時間が必要で、2つのキーが、2つの異なるスレッドを起こしやすい、各スレッドごとにキーを取得すると、デッドロックがあるだろう、すべての再帰的なロックがこの問題を解決することができます問題。