手动实现读写锁(线程级)
读写锁是共享独占锁。
读锁是共享锁:读的同时不能写,但同时可以多个进程一起读。
写锁是独占锁:同时只能有一个进程进行写。
利用库函数
写模式:
pthread_rwlock_wrlock(&rwlock); //加写锁
写写写……
pthread_rwlock_unlock(&rwlock); //解锁 读模式:
pthread_rwlock_rdlock(&rwlock); //加读锁
读读读……
pthread_rwlock_unlock(&rwlock); //解锁
互斥锁+条件变量
这种方法互斥锁其实锁的是读写线程的数量(w,r 变量),通过读写线程个数协调读写操作。
写模式:
pthread_mutex_lock(&mutex); //加锁
while(w != 0 || r > 0)
{pthread_cond_wait(&cond, &mutex); //等待条件成立
}
w++;pthread_mutex_unlock(&mutex);
写写写……
pthread_mutex_lock(&mutex);
w--;
pthread_cond_broadcast(&cond); //唤醒其他因条件变量而产生的阻塞
pthread_mutex_unlock(&mutex); //解锁读模式:
pthread_mutex_lock(&mutex);
while(w != 0)
{pthread_cond_wait(&cond, &mutex); //等待条件成立
}
r++;
pthread_mutex_unlock(&mutex);
读读读……
pthread_mutex_lock(&mutex);
r--;
if(r == 0)pthread_cond_broadcast(&cond); //唤醒其他因条件变量而产生的阻塞
pthread_mutex_unlock(&mutex); //解锁
转载于:https://www.cnblogs.com/sinpo828/p/10678952.html
手动实现读写锁(线程级)相关推荐
- Mysql读写锁保姆级图文教程
摘要:读锁会阻塞写,但是不会阻塞读,而写锁会把杜希俄都阻塞. 本文分享自华为云社区<Mysql保姆级读写锁图文教程丨[绽放吧!数据库]>,作者:Code皮皮虾 . 准备 创建mylock表 ...
- Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)
本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...
- 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁
浅谈JUC的常用类 JUC就是java.util.concurrent-包下的类 回顾多线程 Java默认有几个线程? 2 个 mian.GC Java 真的可以开启线程吗? 开不了,点击源码得知:本 ...
- 第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)
一. 整体介绍 温馨提示:内核模式锁,在不到万不得已的情况下,不要使用它,因为代价太大了,有很多种替代方案. 内核模式锁包括: ①:事件锁 ②:信号量 ③:互斥锁 ④:读写锁 ⑤:动态锁 二. 事件锁 ...
- 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发
多线程: 多线程就是同时执行多个应用程序,需要硬件的支持 同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多条指令 ...
- c程序封装linux,Linux系统使用C语言封装线程读写锁
在Linux平台上已经有现成的线程读写锁pthread_rwlock_t以及相关API,现将这些API封装成与Win32平台上相同的接口,以便于编写跨平台程序.这些API包括pthread_rwloc ...
- linux线程下的读写锁
读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作.这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时 ...
- java线程:互斥锁与读写锁
2019独角兽企业重金招聘Python工程师标准>>> 两种互斥锁机制: 1.synchronized 2.ReentrantLock ReentrantLock是jdk5的新特性, ...
- linux线程同步(3)-读写锁
一.概述 读写锁与互斥量的功能类似,对临界区的共享资源进行保护!互斥量一次只让一个线程进入临界区, ...
- 【Linux系统编程】线程同步与互斥:读写锁
读写锁基本原理 当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住.但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互 ...
最新文章
- 在线作图|如何画韦恩图(包含upset图)
- CentOS基础命令大全
- Base64的解码和编码
- 浏览器根据什么来判定脚本失控?
- 转:LruCache算法
- uva-465(overflow)
- qt 正则 html,Qt 正则表达式 (一)
- 《验收测试驱动开发:ATDD实例详解》—第2章2.2节结对完成第一个测试
- word应用2(实用)
- “银行卡三要素验证”—派遣工工资表单零差错
- 小说网站源码+采集器+App端
- euht网络登录_基于EUHT技术的城轨高速线路车地无线网络解决方案
- OceanBase数据库大赛
- 【枚举·习题】拉灯游戏or费解的开关
- 如何处理WordPress上传资源报HTTP错误
- Android 拍照后图片的旋转,合并,兼容性 相机开发
- docker 镜像瘦身工具 docker-slim
- #Visio#教会你怎么安装和使用 Visio 哦 ~ ~
- 汉诺塔(河内塔)问题(递归)
- 可道云kodexplorer搭建私有云后的配置优化