(1)读写锁:只有一把锁,但是有两种状态(读,写)

1)读写锁的三种状态:读锁,写锁,不加锁

2)读写锁特性(12字):写锁优先级高,写独占,读共享

1>写模式加锁时,解锁前,所有对该线程加锁的线程都会被阻塞。

2>读模式加锁时,如果线程是读加锁则成功,如果线程是写加锁会阻塞。

3>读锁、写锁并行阻塞时,写锁优先级高,即解锁后优先执行写锁操作。

3)读写锁非常适合对数据读的次数比写的次数多。

(2)读写锁函数:成功返回0,失败直接返回错误号。

pthread_rwlock_t类型 用于定义一个读写锁变量

1)pthread_rwlock_init:初始化一把读写锁

int pthread_rwolck_init(pthread_rwlock_t*restrict rwlock,const pthread_rwlockattr_t*restrict attr);

restrict关键字:只用于限制指针,所有修改该指针指向内存中内容的操作,只能通过本指针来完成,不能通过除本指针之外的其它变量或指针修改。

              参数2:attr表读写属性,通常使用NULL,表示默认属性

2)销毁一把读写锁:pthread_rwlock_destroy

int pthread_rwlock_destroy(pthread_rwlock_t * rwlock);

3)以读方式请求加锁:pthread_rwlock_rdlock

int pthread_rwlock_rdlock(pthread_rwlock_t * rwlock);

4)以写方式请求加锁:pthread_rwlock_rdlock

int pthread_rwlock_wrlock(pthread_rwlock_t * rwlock);

5)解锁:pthread_rwlock_unlock

int pthread_rwlock_unlock(pthread_rwlock_t * rwlock);

6)非阻塞请求读锁:pthread_rwlock_tryrdlock

int pthread_rwlock_tryrdlock(pthread_rwlock_t * rwlock);

7)非阻塞请求写锁:pthread_rwlock_trywrlock

int pthread_rwlock_trywrock(pthread_rwlock_t * rwlock);

(3)读写锁示例:多个线程对同一全局数据进行读写操作

linux操作系统之读写锁相关推荐

  1. Linux应用开发 - 读写锁

    Linux应用开发 - 读写锁 什么时候用到读写锁:多线程开发中,如果少数线程会对共享内存数据修改,多数线程只是读取共享数据的值,就适用于读写锁解决"线程间抢夺资源"的问题. 只要 ...

  2. linux内核之读写锁rwlock_t使用入门

    如果锁定写锁,则阻止其他地方读或者写,此时写或者读只能等待. 如果锁定写锁,则允许其他的读,但不允许写,写只能等待. 使用流程: 声明一个读写锁: rwlock_t mylock; 初始化: rwlo ...

  3. linux 进程间读写锁,Linux系统编程—进程间同步

    我们知道,线程间同步有多种方式,比如:信号量.互斥量.读写锁,等等.那进程间如何实现同步呢?本文介绍两种方式:互斥量和文件锁. ##互斥量mutex 我们已经知道了互斥量可以用于在线程间同步,但实际上 ...

  4. Linux线程同步读写锁 rwlock

    读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁. 1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞: 2 ...

  5. linux 进程 读写锁,linux 下实现高性能读写锁(read/write lock)

    前一篇文章分析了Windows slim read/write lock的工作原理.我们知道它的设计相当精妙,于是我们可以借鉴它的思路来设计linux下的读写锁. 在这个读写锁的设计上,需要注意的是l ...

  6. 深度解析Linux读写锁逻辑

    一.Linux为何会引入读写锁? 除了mutex,在linux内核中,还有一个经常用到的睡眠锁就是rw semaphore(后文简称为rwsem),它到底和mutex有什么不同呢?为何会有rw sem ...

  7. 【Linux内核】RW读写锁机制

    读写锁机制 Linux内核中读写锁的机制是一种多读单写的锁机制,它允许多个读操作同时进行,但只能有一个写操作进行.当有写操作时,所有读操作都会被阻塞,直到写操作完成. 在内核中,读写锁主要由以下两个结 ...

  8. 随想录(一种新的读写锁的写法)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 做游戏的同学想必对云风很熟悉.这一段时间他开发的skynet和ejoy2d两个软件框架在git ...

  9. go语言基础-----18-----协程安全、互斥锁、读写锁、匿名锁、sync.Once

    1 线(协)程安全-互斥锁 竞态检查工具是基于运行时代码检查,而不是通过代码静态分析来完成的,可以添加-race 来执行竞态检测.但是对于那些没 有机会运行到的代码逻辑中如果存在安全隐患,即使加了-r ...

最新文章

  1. 高性能ASP.NET站点构建之简单的优化措施
  2. 远哥Amoeba源码分析之:核心类说明
  3. linux VIRT内存占太大,Java top VIRT 内存占用有关问题
  4. SAP Spartacus delivery mode页面设计
  5. SCARA机器人与 DELTA机器人
  6. LeetCode 708. 循环有序列表的插入
  7. IDEA快捷键显示重载
  8. datetime 索引_超全的数据库建表/SQL/索引规范,适合贴在工位上!
  9. 林淮川孙玄:分布式锁选型背后的架构设计思维【附源码】
  10. 安装软件时“应用程序无法启动,因为应用程序的并行配置不正确......”
  11. oppo计算机锁屏快捷键,电脑如何快速锁屏
  12. 分布式丛林探险系列之 Redis 主从复制模式
  13. 那个找不到工作的iOS程序猿
  14. RGB和HSV相互转换
  15. java redis实现抢购_【抢购/秒杀】redis实现高并发下的抢购/秒杀功能
  16. 【Java毕设】CRM客户管理系统(SSM+SpringBoot+MySQL,附源码)
  17. 锐评美赛2021C、D、E题 o奖论文
  18. Item Tagging for Information Retrieval: A Tripartite Graph Neural Network based Approach 用于信息检索的项目标签
  19. TCP报文的标志字段
  20. BUUCTF:爱因斯坦

热门文章

  1. DB 数据同步到数据仓库的架构与实践
  2. C 语言实例 - 使用结构体(struct)
  3. HTTP基础10--web(2)
  4. JAVA多线程学习3--线程一些方法
  5. 一个很不错的wp企业站模板
  6. php if终止,php判断用户是否掉线及关闭网页的方法分享
  7. java 二维数组奇数金字塔_二维数组:奇数阶魔方 | 新思维:C语言程序设计
  8. tomcat启动java项目_Java web项目启动Tomcat报错解决方案
  9. 服务器e系列和l的区别,i.e.和 e.g.的区别和使用方法
  10. java bag_Java - T---bag - 博客园