且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

c++多线程编程之互斥对象(锁)的使用之----死锁

更新时间:2022-07-01 03:54:18

一、死锁会在什么情况发生

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方法就出现死锁。

二、如何避免死锁