系统编程-读写锁
1|0读写锁
-
互斥锁的缺陷
- 互斥锁无论读取共享资源,还是修改共享资源,都是要上锁,而且在上锁期间,其它线程不能上锁
-
概念
- 与互斥锁类似,但是读写锁允许更高的并行性。特性是,写独占,读共享
-
读写锁的状态
- 特别强调:读写锁只有一把,但具有两种状态
- 读模式下的加锁状态(读锁)
- 写模式下的加锁状态(写锁)
-
读写锁的特性
- 读写锁是“写锁”时,解锁前,所有对该锁该锁的线程都阻塞
- 读写锁是“读锁”时,如果线程以读模式对其加锁会成功;写模式加锁就会阻塞
- 读写锁也叫共享-独占锁。当读写锁以读模式锁住时,它是以共享模式锁住的;当它以写模式锁住时,是以独占模式锁住的
- 写独占,读共享
- 读写锁非常适合对于数据结构读的次数远大于写的情况
- 写锁优先级高
-
读写锁函数的接口
-
定义一个读写锁变量----->
pthread_rwlock_t rwlock
-
初始化读写锁变量----->
pthread_rwlock_init()
- 读锁上锁----->
pthread_rwlock_rdlock()
- 写锁上锁----->
pthread_rwlock_wrlock()
- 读写锁解锁---->
pthread_rwlock_unlock
- 销毁读写锁---->
pthread_rwlock_destroy
- 案例:
-
2|0条件变量
-
什么是条件变量
- 线程因为某一条件/情况不成立,进入一个变量中等待,这个存放线程的变量的就是条件变量。条件变量本身不是锁,但它可以造成线程堵塞。通常是与互斥锁配合使用。给多线程提供一个会和的场合
-
关于条件变量的函数接口
-
定义一个条件变量----->
pthread_cond_t cond
-
初始化条件变量----->
pthread_cond_init()
- 如何进入条件变量等待
- 关于
pthread_cond_timedwait
获取当前时间:
- 如何唤醒条件变量中等待的线程?---->线程离开条件变量会自动上锁
- 销毁条件变量------>
pthread_cond_destroy()
-案例:
练习:有4个小孩,每个小孩的任务就是领取生活费1000,他们回学校之前银行卡父亲先打个两千,2个小孩可以领取到,就是两个线程退出,另外两个进入条件变量等待,父亲再打钱1000,唤醒所有的小孩来拿钱,过了一会,再打1000,再唤醒最后一个小孩起来拿钱赶紧去上学。 -
3|0条件变量生产者消费者模型
- 概念
- 线程同步典型的案例即为生产者消费模型,而借助条件变量来实现这一模型,是比较常见的一种方法。假定有两个线程,一个线程模拟生产者行为,一个去模拟消费者行为。两个线程同时操作一个共享资源(一般称之为汇聚),生产向其中添加商品,消费就是消费者去消耗掉商品
__EOF__

本文作者:若达萨罗
本文链接:https://www.cnblogs.com/bcc0729/p/17672001.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/bcc0729/p/17672001.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」