互斥锁/读写锁的概念及使用、死锁的避免

news/2025/1/18 7:59:41/

互斥锁的概念和使用

  • 线程通信-互斥
    临界资源:一次只允许一个任务(进程、线程)访问的共享资源
    临界区:访问临界资源的代码
    互斥机制:mutex互斥锁,任务访问临界资源前申请锁,访问完后释放锁
  • 互斥锁初始化
    两种方法创建互斥锁,静态方式和动态方式
    动态方式:
    int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
    其中mutexattr用于指定互斥锁属性,如果为NULL则使用缺省属性。
    静态方式:
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  • 锁的销毁:
    int pthread_mutex_destroy(pthread_mutex_t *mutex)
    在Linux中,互斥锁并不占用任何资源,因此LinuxThreads中的 pthread_mutex_destroy()除了检查锁状态以外(锁定状态则返回EBUSY)没有其他动作。
  • 互斥锁的使用
    int pthread_mutex_lock(pthread_mutex_t *mutex)//mutex 指的是互斥锁对象
    int pthread_mutex_unlock(pthread_mutex_t *mutex)
    int pthread_mutex_trylock(pthread_mutex_t *mutex)
    注:
    pthread_mutex_lock 如果无法获取锁,任务阻塞,pthread_mutex_trylock如果无法获取锁,返回EBUSY而不是挂起等待
    vim 设置代码全文格式化:gg=G
  • 代码如下:
    在这里插入图片描述
    在这里插入图片描述
  • 执行如下:
    在这里插入图片描述
    注:可以发现文件里的字符很乱,因为线程之间没有锁,都在一起执行,就会处乱,所以需要加入互斥锁的概念

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

相关文章

cartographer离线建图报错:data_.trajectory_nodes.SizeOfTrajectoryOrZero

cartographer离线建图报错: data_.trajectory_nodes.SizeOfTrajectoryOrZero [FATAL] [1706177325.876019302, 1706015603.398505596]: F0125 18:08:45.000000 17607 pose_graph_2d.cc:1314] Check failed: data_.trajectory_nodes.SizeOfTrajectoryOrZero(trajectory_id) &…

一些es的基本操作

目录 给索引增加字段:给索引删除字段[^1]:创建索引:插入document删除document(应该是按ID) : 给索引增加字段: 用postMan: 给名为population_portrait_hash_seven的索引增加了一个text类型的字段。 用chrome插件Elasticvue 的Re…

力扣hot100 每日温度 单调递减栈

Problem: 739. 每日温度 文章目录 思路复杂度💝 单调栈 思路 👩‍🏫 参考题解 复杂度 ⏰ 时间复杂度: O ( n ) O(n) O(n) 🌎 空间复杂度: O ( n ) O(n) O(n) 💝 单调栈 class Solution {public int[] dailyTem…

php数组算法(1)判断一维数组和多元数组中的元素是否相等并输出键值key

在php中,如何判断[1,0,1]和[ [0, 0, 0],//体质正常 [1, 0, 0],//气虚体质 [0, 1, 0],//血瘀体质 [0, 0, 1],//阴虚体质 [1, 1, 0],//气虚兼血瘀体质 [1, 0, 1],//气虚兼阴虚体质 [0, 1, 1],//血瘀兼阴虚体质 [1, 1, 1],//气虚兼血瘀兼阴虚体质 ];中的第n项相等&…

qemu调试kernel启动(从第一行汇编开始)

一、背景 大部分qemu调试kernel 都是讲解从start_kernel开始设置断点,然后开启调试; 但是我们熟悉linux启动流程的伙伴肯定知道,在start_kernel之前还有一段汇编,包括初始化页表及mmu等操作, 这部分如何调试呢&#x…

聚醚醚酮(Polyether Ether Ketone)PEEK在粘接使用时可以使用UV胶水吗?要注意哪些事项?

一般情况下,聚醚醚酮(Polyether Ether Ketone,PEEK)是一种难以黏附的高性能工程塑料,而UV胶水通常不是与PEEK进行粘接的首选方法。PEEK表面的化学性质和高温性能使得它对常规胶水的附着性较低。然而,有一些…

关键点标注工具

目录 PoseAnnotationTool 修改后很好用: 关键点 json模板: labelme的缺点 关键点标注 labelme 修改失败 竟然没有发现好用的 人体关键点2d 标注工具,准备尝试修改labelme

力扣题目训练(3)

2024年1月27日力扣题目训练 2024年1月27日力扣题目训练290. 单词规律292. Nim 游戏303. 区域和检索 - 数组不可变91. 解码方法92. 反转链表 II41. 缺失的第一个正数 2024年1月27日力扣题目训练 2024年1月27日第三天编程训练,今天主要是进行一些题训练,包…