[ Linux ] 死锁以及如何避免死锁
创始人
2024-04-29 07:06:07
0

目录

1.什么是死锁?

死锁

2.模拟死锁情况

3.死锁四个必要条件

4.避免死锁的方法

5.避免死锁的算法

银行家算法(了解为主)


1.什么是死锁?

死锁

  • 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待的状态。

2.模拟死锁情况

我们使用多线程模拟一个死锁的情况。

#include 
#include 
#include 
#include using namespace std;pthread_mutex_t mutexA = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t mutexB = PTHREAD_MUTEX_INITIALIZER;
void* startRoutine1(void* args)
{while(true){pthread_mutex_lock(&mutexA);sleep(1);pthread_mutex_lock(&mutexB);cout<<"我是线程1,我的tid"<

当上面这段程序运行起来时,线程1和线程2会同时调用各自的startRountine函数,由于mutexA和mutexB均为临界资源只有一份,而在程序中,线程1会先申请mutexA,线程2会先申请mutexB,而当他们申请结束时都会等待1秒(这里等待一秒是确保两个线程各自占有一把锁),一秒休眠结束后,当线程1想要申请mutexB时,由于mutexB已经被线程2占有且未释放,因此线程1将阻塞等待mutexB的释放;同理,线程2也会阻塞等待mutexA。此时,各线程均占有不会释放的资源mutex,并且互相申请了其他线程所占用不会释放的资源而除以一种永久等待的状态。我们把这种状态就称为死锁。当程序运行起来时,我们也能看到程序并没有什么打印结果.....

我们使用监控脚本查看3个线程任然在运行之中

while :; do ps -aL | grep mythread ; sleep 1;echo "---------------";done

3.死锁四个必要条件

死锁的必要条件:死锁情况一旦发生,这四个条件一定都要满足。如果有一个没有产生,那死锁的条件便不成立。

  1. 互斥条件:一个资源每次只能被一个执行流使用
  2. 请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不败
  3. 不剥夺条件:一个执行流已获得的资源,在未使用完之前,不能强行剥夺
  4. 循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系

4.避免死锁的方法

  • 破坏死锁的四个必要条件
  • 加锁顺序一致
  • 避免锁未释放的场景
  • 资源一次性分配

5.避免死锁的算法

银行家算法(了解为主)

我们在当时将锁的时候,查看过pthread_mutex_lock和pthread_mutex_unlock函数,我们也使用了,那么大家还记不记得其中还有一个trylock。这个函数就是用来尝试申请,如果是安全序列则会正式分配,否则不会分配。

核心思想:

银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...