程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> python避免死鎖方法實例分析

python避免死鎖方法實例分析

編輯:更多關於編程

       本文實例講述了python避免死鎖方法。分享給大家供大家參考。具體分析如下:

      當兩個或者更多的線程在等待資源的時候就會產生死鎖,兩個線程相互等待。

      在本文實例中 thread1 等待thread2釋放block , thread2等待thtead1釋放ablock,

      避免死鎖的原則:

      1. 一定要以一個固定的順序來取得鎖,這個列子中,意味著首先要取得alock, 然後再去block

      2. 一定要按照與取得鎖相反的順序釋放鎖,這裡,應該先釋放block,然後是alock

      ?

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 import threading ,time a = 5 alock = threading.Lock() b = 5 block = threading.Lock() def thread1calc(): print "thread1 acquiring lock a" alock.acquire() time.sleep(5) print "thread1 acquiring lock b" block.acquire() a+=5 b+=5 print "thread1 releasing both locks" block.release() alock.release() def thread2calc(): print "thread2 acquiring lock b" block.acquire() time.sleep(5) print "thread2 acquiring lock a" alock.acquire() time.sleep(5) a+=10 b+=10 print "thread2 releasing both locks" block.release() alock.release() t = threading.Thread(target = thread1calc) t.setDaemon(1) t.start() t = threading.Thread(target = thread2calc) t.setDaemon(2) t.start() while 1: time.sleep(300)

      輸出:

      ?

    1 2 3 4 thread1 acquiring lock a thread2 acquiring lock b thread1 acquiring lock b thread2 acquiring lock a

      希望本文所述對大家的Python程序設計有所幫助。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved