美文网首页程序员
温故而知心 - 多线程死锁情况

温故而知心 - 多线程死锁情况

作者: 哈比猪 | 来源:发表于2016-09-21 10:22 被阅读0次

    死锁的必要条件

    • 互斥条件:一个资源每次只能被一个进程使用。
    • 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
    • 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
    • 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
      这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
      一不满足,就不会发生死锁。

    死锁的简单例子

    A Thread:

    {
      Lock(Mutex_A);
      Lock(Mutex_B);
    }
    

    B Thread:

    {
      Lock(Mutex_B);
      Lock(Mutex_A);
    }
    

    由于两次Lock之间并不是原子操作,故有几率的当A线程进入Lock(Mutex_A)的时候B线程恰好进入了Lock(Mutex_B),这时候产生了循环等待,就进入了死锁。

    相关文章

      网友评论

        本文标题:温故而知心 - 多线程死锁情况

        本文链接:https://www.haomeiwen.com/subject/liqaettx.html