DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

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

二、如何避免死锁

posted on 2013-10-08 15:04  DoubleLi  阅读(8404)  评论(0编辑  收藏  举报