读写锁是共享独占锁。
读锁是共享锁:读的同时不能写,但同时可以多个进程一起读。
写锁是独占锁:同时只能有一个进程进行写。

利用库函数

写模式:
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

手动实现读写锁(线程级)相关推荐

  1. Mysql读写锁保姆级图文教程

    摘要:读锁会阻塞写,但是不会阻塞读,而写锁会把杜希俄都阻塞. 本文分享自华为云社区<Mysql保姆级读写锁图文教程丨[绽放吧!数据库]>,作者:Code皮皮虾 . 准备 创建mylock表 ...

  2. Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)

    本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...

  3. 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁

    浅谈JUC的常用类 JUC就是java.util.concurrent-包下的类 回顾多线程 Java默认有几个线程? 2 个 mian.GC Java 真的可以开启线程吗? 开不了,点击源码得知:本 ...

  4. 第十二节:深究内核模式锁的使用场景(自动事件锁、手动事件锁、信号量、互斥锁、读写锁、动态锁)

    一. 整体介绍 温馨提示:内核模式锁,在不到万不得已的情况下,不要使用它,因为代价太大了,有很多种替代方案. 内核模式锁包括: ①:事件锁 ②:信号量 ③:互斥锁 ④:读写锁 ⑤:动态锁 二. 事件锁 ...

  5. 并发编程概念、程序线程进程、线程同步、互斥量、读写锁、协程并发

    多线程: 多线程就是同时执行多个应用程序,需要硬件的支持 同时执行:不是某个时间段同时,cpu切换的比较快,所有用户会感觉是在同时运行 并发与并行: 并行(parallel):指在同一时刻,有多条指令 ...

  6. c程序封装linux,Linux系统使用C语言封装线程读写锁

    在Linux平台上已经有现成的线程读写锁pthread_rwlock_t以及相关API,现将这些API封装成与Win32平台上相同的接口,以便于编写跨平台程序.这些API包括pthread_rwloc ...

  7. linux线程下的读写锁

    读写锁实际是一种特殊的自旋锁,它把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作.这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时 ...

  8. java线程:互斥锁与读写锁

    2019独角兽企业重金招聘Python工程师标准>>> 两种互斥锁机制: 1.synchronized 2.ReentrantLock ReentrantLock是jdk5的新特性, ...

  9. linux线程同步(3)-读写锁

    一.概述                                                    读写锁与互斥量的功能类似,对临界区的共享资源进行保护!互斥量一次只让一个线程进入临界区, ...

  10. 【Linux系统编程】线程同步与互斥:读写锁

    读写锁基本原理 当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住.但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互 ...

最新文章

  1. 在线作图|如何画韦恩图(包含upset图)
  2. CentOS基础命令大全
  3. Base64的解码和编码
  4. 浏览器根据什么来判定脚本失控?
  5. 转:LruCache算法
  6. uva-465(overflow)
  7. qt 正则 html,Qt 正则表达式 (一)
  8. 《验收测试驱动开发:ATDD实例详解》—第2章2.2节结对完成第一个测试
  9. word应用2(实用)
  10. “银行卡三要素验证”—派遣工工资表单零差错
  11. 小说网站源码+采集器+App端
  12. euht网络登录_基于EUHT技术的城轨高速线路车地无线网络解决方案
  13. OceanBase数据库大赛
  14. 【枚举·习题】拉灯游戏or费解的开关
  15. 如何处理WordPress上传资源报HTTP错误
  16. Android 拍照后图片的旋转,合并,兼容性 相机开发
  17. docker 镜像瘦身工具 docker-slim
  18. #Visio#教会你怎么安装和使用 Visio 哦 ~ ~
  19. 汉诺塔(河内塔)问题(递归)
  20. 可道云kodexplorer搭建私有云后的配置优化

热门文章

  1. 拓端tecdat|数据岗位现状调查报告
  2. 3-8 堆栈模拟队列 (25 分)
  3. kali文件重命名_硬核教程,必看!「网络安全入门」四、文件上传漏洞
  4. 一个react项目案例01 组件部分
  5. 操作系统 第二部分 进程管理(五)
  6. pythonint函数的参数_pythonint函数怎么用
  7. matlab preparets,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?
  8. return、break、continue三者的区别
  9. JDK动态代理执行过程分析
  10. @Transactional注解属性(3)