读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排它的,读可以有多个在读,写只有唯一个在写,写的时候不允许读。

具有强读者同步和强写者同步两种形式:

强读者同步:当写者没有进行写操作时,读者就可以访问;

强写者同步: 当所有写者都写完之后,才能进行读操作,读者需要最新的信息,一些实时性较高的系统会用到这种锁。

读写锁的初始化:

pthread_rwlock_t m_rw_lock;

pthread_rwlock_init(pthread_rwlock_t*, pthread_rwattr_t*);

获取读写锁的读锁操作:分为阻塞式获取和非阻塞式获取,如果读写锁由一个写者持有,则读线程会阻塞直到写入者释放读写锁。

阻塞式:pthread_rwlock_rdlock(pthread_rwlock_t);

非阻塞式:pthread_rwlock_tryrdlock(pthread_rwlock_t);

返回值:0,表示成功; 非0表示错误码;非阻塞会返回ebusy而不会让线程等待。

获取读写锁的写锁操作:分为阻塞和非阻塞,如果对应的读写锁被其它写者持有,或者读写锁被读者持有,该线程都会阻塞等待。

阻塞式:pthread_rwlock_wrlock(pthread_rwlock_t*);

非阻塞式:pthread_rwlock_trywrlock(pthread_rwlock_t*);

释放读写锁:

pthread_rwlock_unlock(pthread_rwlock_t*);

互斥锁与读写锁的区别:

1、当访问临界区的资源时(访问的含义包括所有的操作),需要上互斥锁;

2、当对数据(互斥锁中的临界区资源)进行读取时,需要上读取锁,当对数据进行写入时,需要上写入锁。

读写锁的优点:

对于读数据较修改数据频繁的应用,用读写锁代替互斥锁可以提高效率。因为使用互斥锁时,即使是读出数据(相当于操作临界区资源)都需要上互斥锁;而采用读写锁则允许在任一时刻多个读出

者存在,提高了并发性。

Linux读写锁释放,Linux读写锁的使用相关推荐

  1. node linux cache补释放,linux下释放cache内存

    细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法 ...

  2. 从自旋锁、睡眠锁、读写锁到 Linux RCU 机制讲解

    总结一下 O/S 课程里面和锁相关的内容. 本文是 6.S081 课程的相关内容总结回顾结合 Real World 的 Linux 讲解各种锁和 RCU lock free 机制原理, 前置知识是基本 ...

  3. Linux多线程开发-线程同步-读写锁pthread_rwlock_t

    1.读写锁概念 对资源的访问抽象为两种类型,即独占和共享.独占资源具有排他性,例如写操作.共享资源可以同时由多个线程访问,不对该资源执行写操作.针对资源的读和写操作分别加锁,写操作加锁与互斥锁相同,但 ...

  4. Linux 多线程 ”一写多读” 模式下的无锁设计

    缘起 双buffer "无锁" 设计 指针的切换 ptr 竞争条件的解决 指针访问丢失 延伸 结语 缘起 在linux多线程环境下对同一变量进行读写时,经常会遇到读写的原子性问题, ...

  5. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)

    前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...

  6. Java 独占锁ReentrantLock、读(悲观读)写锁ReentrantReadWriteLock、读(乐观读/悲观读)写锁StampedLock

    1.AbstractQueuedSynchronizer 锁必然要知道AbstractQueuedSynchronizer(AQS),AQS提供了一个框架,用于实现依赖于先进先出(FIFO)等待队列的 ...

  7. [转]Linux内核的文件预读(readahead)

    编者按:Linux文件预读算法磁盘I/O性能的发展远远滞后于CPU和内存,因而成为现代计算机系统的一个主要瓶颈.预读可以有效的减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要 ...

  8. linux 下串口转usb不能发送数据包,Linux ,USB转串口驱动,没法读到数据

    Linux ,USB转串口驱动,无法读到数据 usb 1-1.1: new full-speed USB device number 5 using ehci-pci usb 1-1.1: New U ...

  9. linux内核新书,关于Linux,你该读哪些书

    这是应读者要求写的一篇综合图书推荐文章,关于Linux的.图灵Linux经典书自然不少,另外,新出版的ARM,林纳斯大神的传纪,也深受读者欢迎.这次总结了每本书的优缺点,希望大家能找到真正适合自己阅读 ...

最新文章

  1. ASP在中小企业中具有巨大的潜在市场
  2. python将数字转变为中文读法-python中将阿拉伯数字转换成中文的实现代码
  3. 代码评审会议_如何将电话会议(和访问代码)另存为联系人
  4. intellij idea 导出可执行jar
  5. 分布式存储学习入门(一)
  6. zoj 1101 Gamblers 为什么总是WA?
  7. Matlab 黎卡提方程
  8. 详解Maven多模块Spring Boot项目从创建到打包
  9. 大师启动u盘pe系统装系统(Win03PE增强版)
  10. Excel文件解析性能对比(POI,easyexcel,xlsx-streamer)
  11. 变量存储重温及在Ubuntu系统和Keil中编程验证
  12. 如何在 Unity 中制作一个道具系统
  13. 插件式编程SBP框架极简教程(基于SpringBoot)
  14. 寻梦,总免不了迷茫1
  15. 游戏开发30课 cocoscreator骨骼贴图布局设置
  16. 基于matlab的雷达,基于Matlab的雷达系统仿真
  17. 基于springboot的社区养老系统(养老院)
  18. 最新电容笔推荐,2022年电容笔十大品牌排行榜
  19. win10 开机自动连接宽带最简单方法
  20. Android之发送短信和接收验证码

热门文章

  1. Java内部类与静态内部类
  2. 办公室里绝对不可谈论的4大话题
  3. 常用PHP array数组函数
  4. springmvc+mybatis+sql server实现简单登录功能
  5. 关于Ubuntu 使用PPPoe拨号上网,导致wifi没有错误。
  6. Java的自动装箱与拆箱
  7. 如何绘制类似仓库的平面位置图
  8. SAP 主生产计划(MPS)
  9. 采购定价过程字段解析
  10. 内表使用Binary Search的限制