死鎖的緣由及解決避免的辦法

死鎖原理:多線程

多線程以及多進程改善了系統資源利用率,可是併發執行也帶來了死鎖的問題。併發

死鎖是指一組進程因競爭資源而形成的一種互相等待的僵局,每一個進程都佔有不會釋放的資源並請求其餘進程的不會釋放的資源而處於一種永久等待的狀態spa

死鎖產生的條件:線程

     a、互斥條件(Mutual exclusion):     資源不能被共享,只能由一個進程使用。
     b、請求與保持條件(Hold and wait): 已經獲得資源的進程能夠再次申請新的資源,並對已經得到的資源保持不放。
     c、非剝奪條件(No pre-emption):    系統不能強制收回進程中已經分配的資源,只能由進程使用完本身釋放。
     d、循環等待條件(Circular wait):     若干進程造成的進程環,都佔用對方申請的下一個資源。進程

避免死鎖:資源

  1. 加鎖時限(線程嘗試獲取鎖的時候加上必定的時限,超過期限則放棄對該鎖的請求,並釋放本身佔有的鎖)
  2. 死鎖檢測  1.若是一個進程的當前請求的資源會致使死鎖,系統拒絕啓動該進程;                   2.若是一個資源的分配會致使下一步的死鎖,系統就拒絕本次的分配;
相關文章
相關標籤/搜索