用python示範一種死結的產生,python示範

來源:互聯網
上載者:User

用python示範一種死結的產生,python示範

搞多線程的經常會遇到死結的問題,學習作業系統的時候會講到死結相關的東西,我們用python直觀的示範一下。

死結的一個原因是互斥鎖。假設銀行系統中,使用者a試圖轉賬100塊給使用者b,與此同時使用者b試圖轉賬200塊給使用者a,則可能產生死結。

2個線程互相等待對方的鎖,互相佔用著資源不釋放。

#coding=utf-8import timeimport threadingclass Account:    def __init__(self, _id, balance, lock):        self.id = _id        self.balance = balance        self.lock = lock    def withdraw(self, amount):        self.balance -= amount    def deposit(self, amount):        self.balance += amountdef transfer(_from, to, amount):    if _from.lock.acquire():#鎖住自己的賬戶        _from.withdraw(amount)        time.sleep(1)#讓交易時間變長,2個交易線程時間上重疊,有足夠時間來產生死結        print 'wait for lock...'        if to.lock.acquire():#鎖住對方的賬戶            to.deposit(amount)            to.lock.release()        _from.lock.release()    print 'finish...'a = Account('a',1000, threading.Lock())b = Account('b',1000, threading.Lock())threading.Thread(target = transfer, args = (a, b, 100)).start()threading.Thread(target = transfer, args = (b, a, 200)).start()



什是進程?有幾種基本狀態?進程死結與產生死結的原因

進程是作業系統中的一個核心概念.其概念至今未有嚴格的公認的定義.一般的講,進程是一個具有一定獨立功能的程式關於某個資料集合的一次運行活動.

其基本狀態有3種,即ready(就緒),running(運行),wait(等待).

死結是指,在兩個或多個並發進程中,如果每個進程持有某種資源而又都等待別的進程釋放它們現在保持著的資源,否則就不能向前推進.此時,每個進程都佔用了一定的資源但是又不能向前推進,稱這一組進程產生了死結.
通俗的講,就是兩個或多個進程無止境的等候著永遠不會成立的條件的一種系統狀態.

產生死結的根本原因是系統能夠提供的資源個數比要求該資源的進程數少.其具體原因是1系統資源不足2進程推進順序非法.
 
問進程調度中產生死結的必要條件是什?解決死結有幾種辦法

產生死結的四個必要條件:

(1) 互斥條件:一個資源每次只能被一個進程使用。
(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 迴圈等待條件:若干進程之間形成一種頭尾相接的迴圈等待資源關係。
這四個條件是死結的必要條件,只要系統發生死結,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死結。

死結排除的方法:

1、撤消陷於死結的全部進程;
2、逐個撤消陷於死結的進程,直到死結不存在;
3、從陷於死結的進程中逐個強迫放棄所佔用的資源,直至死結消失。
4、從另外一些進程那裡強行剝奪足夠數量的資源分派給死結進程,以解除死結狀態
參考資料:baike.baidu.com/view/121723.htm
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.