linux操作系统之读写锁
(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操作系统之读写锁相关推荐
- Linux应用开发 - 读写锁
Linux应用开发 - 读写锁 什么时候用到读写锁:多线程开发中,如果少数线程会对共享内存数据修改,多数线程只是读取共享数据的值,就适用于读写锁解决"线程间抢夺资源"的问题. 只要 ...
- linux内核之读写锁rwlock_t使用入门
如果锁定写锁,则阻止其他地方读或者写,此时写或者读只能等待. 如果锁定写锁,则允许其他的读,但不允许写,写只能等待. 使用流程: 声明一个读写锁: rwlock_t mylock; 初始化: rwlo ...
- linux 进程间读写锁,Linux系统编程—进程间同步
我们知道,线程间同步有多种方式,比如:信号量.互斥量.读写锁,等等.那进程间如何实现同步呢?本文介绍两种方式:互斥量和文件锁. ##互斥量mutex 我们已经知道了互斥量可以用于在线程间同步,但实际上 ...
- Linux线程同步读写锁 rwlock
读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁. 1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞: 2 ...
- linux 进程 读写锁,linux 下实现高性能读写锁(read/write lock)
前一篇文章分析了Windows slim read/write lock的工作原理.我们知道它的设计相当精妙,于是我们可以借鉴它的思路来设计linux下的读写锁. 在这个读写锁的设计上,需要注意的是l ...
- 深度解析Linux读写锁逻辑
一.Linux为何会引入读写锁? 除了mutex,在linux内核中,还有一个经常用到的睡眠锁就是rw semaphore(后文简称为rwsem),它到底和mutex有什么不同呢?为何会有rw sem ...
- 【Linux内核】RW读写锁机制
读写锁机制 Linux内核中读写锁的机制是一种多读单写的锁机制,它允许多个读操作同时进行,但只能有一个写操作进行.当有写操作时,所有读操作都会被阻塞,直到写操作完成. 在内核中,读写锁主要由以下两个结 ...
- 随想录(一种新的读写锁的写法)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 做游戏的同学想必对云风很熟悉.这一段时间他开发的skynet和ejoy2d两个软件框架在git ...
- go语言基础-----18-----协程安全、互斥锁、读写锁、匿名锁、sync.Once
1 线(协)程安全-互斥锁 竞态检查工具是基于运行时代码检查,而不是通过代码静态分析来完成的,可以添加-race 来执行竞态检测.但是对于那些没 有机会运行到的代码逻辑中如果存在安全隐患,即使加了-r ...
最新文章
- 高性能ASP.NET站点构建之简单的优化措施
- 远哥Amoeba源码分析之:核心类说明
- linux VIRT内存占太大,Java top VIRT 内存占用有关问题
- SAP Spartacus delivery mode页面设计
- SCARA机器人与 DELTA机器人
- LeetCode 708. 循环有序列表的插入
- IDEA快捷键显示重载
- datetime 索引_超全的数据库建表/SQL/索引规范,适合贴在工位上!
- 林淮川孙玄:分布式锁选型背后的架构设计思维【附源码】
- 安装软件时“应用程序无法启动,因为应用程序的并行配置不正确......”
- oppo计算机锁屏快捷键,电脑如何快速锁屏
- 分布式丛林探险系列之 Redis 主从复制模式
- 那个找不到工作的iOS程序猿
- RGB和HSV相互转换
- java redis实现抢购_【抢购/秒杀】redis实现高并发下的抢购/秒杀功能
- 【Java毕设】CRM客户管理系统(SSM+SpringBoot+MySQL,附源码)
- 锐评美赛2021C、D、E题 o奖论文
- Item Tagging for Information Retrieval: A Tripartite Graph Neural Network based Approach 用于信息检索的项目标签
- TCP报文的标志字段
- BUUCTF:爱因斯坦
热门文章
- DB 数据同步到数据仓库的架构与实践
- C 语言实例 - 使用结构体(struct)
- HTTP基础10--web(2)
- JAVA多线程学习3--线程一些方法
- 一个很不错的wp企业站模板
- php if终止,php判断用户是否掉线及关闭网页的方法分享
- java 二维数组奇数金字塔_二维数组:奇数阶魔方 | 新思维:C语言程序设计
- tomcat启动java项目_Java web项目启动Tomcat报错解决方案
- 服务器e系列和l的区别,i.e.和 e.g.的区别和使用方法
- java bag_Java - T---bag - 博客园