Linux中死锁种类和解决方法

news/2024/12/22 9:25:26/

死锁:

第一种:

加了两次锁,导致还没解锁就想获得锁,一直阻塞:

void*mythread(void *arg)
{int n=5000;int x;while(n--){pthread_mutex_lock(&mutex);pthread_mutex_lock(&mutex);x=number;x++;number=x;pthread_mutex_unlock(&mutex);}
}

第二种:

加了锁,却没解锁:

void*mythread(void *arg)
{int n=5000;int x;while(n--){pthread_mutex_lock(&mutex);pthread_mutex_lock(&mutex);x=number;x++;number=x;}
}

第三种:

线程A拥有A锁,请求获得B锁;线程B拥有B锁,请求获得A锁,这样导致造成线程A和线程B都不释放自己的锁,而且还想获得对方的锁,从而导致死锁。

如何解决死锁:

  1. 让线程按照一定的顺序去访问共享资源
  2. 在访问其他锁的时候,需要将自己的锁解开
  3. 调用pthread_mutex_trylock,如果加锁不成功立刻返回。

http://www.ppmy.cn/news/1365039.html

相关文章

如何选购油烟净化器?环保性能与个人需求的完美契合

我最近分析了餐饮市场的油烟净化器等产品报告,解决了餐饮业厨房油腻的难题,更加方便了在餐饮业和商业场所有需求的小伙伴们。 在选择油烟净化器时,环保性能与个人需求的完美契合至关重要。下面,让我们一起探讨如何选购适合自己的油…

初识Lombok

前言 最近读一些公司的业务代码,发现近几年的java项目工程中都使用了lombok,lombok是一个可以自动生成get,set、toString等模板类方法的工具框架,程序再引入lombok后,添加一个注解便可以不写get\set\toString等方法。 Lombok示例…

蓝桥杯Learning

Part 1 递归和递推 1. 简单斐波那契数列 n int(input())st [0]*(47) # 注意这个地方,需要将数组空间设置的大一些,否则会数组越界 st[1] 0 st[2] 1 # 这个方法相当于是递推,即先求解一个大问题的若干个小问题 def dfs(u):if u 1:print(…

未来新质生产力Agent的起源与应用

Agent是什么? AI Agent的发展经历了从哲学思想启蒙到计算机科学助力、专家系统兴起、机器学习崛起、深度学习突破等多个阶段。如今,AI Agent已经成为人工智能领域的重要组成部分,为人类带来了巨大的便利和发展机遇。早在古希腊时期&#xff0…

第十一天-Excel的操作

目录 1.xlrd-Excel的读模块 安装 使用 获取工作簿 读取工作簿的内容 xlsxwriter-Excel的写模块 安装 使用 生成图表 add_series参数 图表的样式 demo:生成图表 Excel的操作在python中有多个模块,为了能够快速使用,选择了相对简单…

【MySQL】_联合查询基础表

联合查询也称为多表查询,是将多个表联合到一起进行查询; 笛卡尔积是联合查询的基础,笛卡尔积其实就是一种排列组合,把两张表的记录尽可能地排列组合出n种情况: 以两张表:班级表与学生表为例,计…

SpringBoot快速入门(黑马学习笔记)

需求 需求:基于SpringBoot的方式开发一个Web应用,浏览器发起请求/hello后,给浏览器返回字符串"Hello World~"。 开发步骤 第一步:创建SpringBoot工程项目 第二步:定义HelloController类,添加方…

ChatGPT能替代什么人?

上一讲关于ChatGPT的热炒,其实对于我们来说算是敲了敲警钟。 其实在今天,关于ChatGPT,最多人关注的一个问题就是:ChatGPT能取代人吗,或者说能抢人的饭碗么吗? 有人说不能,也有人说能&#xff…