zoukankan      html  css  js  c++  java
  • 死锁的四个必要条件及死锁伪代码

    • 互斥条件

                      死锁的发生一定是在对临界资源的访问上,即同一时刻资源只能由一个进程访问。

    • 持有且保持条件

        进程占有一个资源同时请求另一资源,在未获取另一资源的情况下并不释放原有资源。

    • 不可抢占条件

        低优先级进程占有的资源在自由释放前,不可被其他进程抢占。

    • 环路等待条件

        发生死锁时必定会有一条进程-资源环形等待链,即存在进程p0、p1、、、、pn,p0在等待p1释放资源,p1在等待p2释放资源,、、、、,pn在等待p0释放资源。

    所以我们可以从破坏以上4个条件的成立来防止死锁的发生。

    • 死锁伪代码

    1、连续对同一个互斥量两次加锁

    thread_fun(){
        pthread_mutex_lock(&mutex);
        pthread_mutex_lock(&mutex);
        pthread_mutex_unlock(&mutex);
        pthread_mutex_unlock(&mutex):
    }

    2、线程A对互斥量一加锁同时等待互斥量二解锁,线程B对互斥量二加锁同时等待互斥量一解锁

    thread_fun1(){
        pthread_mutex_lock(&mutex1);
        pthread_mutex_lock(&mutex2);
        pthread_mutex_unlock(&mutex2);
        pthread_mutex_unlock(&mutex1);
    }
    
    thread_fun2(){
        pthread_mutex_lock(&mutex2);
        pthread_mutex_lock(&mutex1);
        pthread_mutex_unlock(&mutex1);
        pthread_mutex_unlock(&mutex2);
    }

     

  • 相关阅读:
    Java String, StringBuffer和StringBuilder实例
    java中字符串的比较
    java中子类继承父类时是否继承构造函数
    Java中抽象类和接口的用法和区别
    与(&)、非(~)、或(|)、异或(^)
    Linux03
    Linux02
    Linux01
    力扣算法题
    算法 栈、队列、二分查找
  • 原文地址:https://www.cnblogs.com/coderht/p/7156550.html
Copyright © 2011-2022 走看看