死锁的四个必要条件及死锁伪代码

  • 互斥条件

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

  • 持有且保持条件

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

  • 不可抢占条件

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

  • 环路等待条件

    发生死锁时必定会有一条进程-资源环形等待链,即存在进程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);
}

 

 

转载于:https://www.cnblogs.com/coderht/p/7156550.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值