c++多線程編程之互斥對象(鎖)的使用之----死鎖


一、死鎖會在什么情況發生

1、假設有如下代碼

   mutex;   //代表一個全局互斥對象

   void  A()

      {

          mutex.lock();

          //這里操作共享數據

          B();  //這里調用B方法

          mutex.unlock();

         return;

      }

 

   void  B()

      {

          mutex.lock();

          //這里操作共享數據

          mutex.unlock();

         return;

      }

此時會由於在A、B方法中相互等待unlock而導致死鎖。

2、假設有如何代碼

   mutex;   //代表一個全局互斥對象

   void  A()

      {

          mutex.lock();

          //這里操作共享數據

           if(.....)

          {

              return;

           }

         mutex.unlock();

         return;

      }

由於在if的執行體內直接retun,而沒有調用unlock,導致另一個線程再調用A方法就出現死鎖。

二、如何避免死鎖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM