Linux多线程的同步------读写锁
前面介绍过Linux多线程同步的另外两个方法------互斥锁和信号量
Linux多线程的同步-----信号量和互斥锁_神厨小福贵!的博客-CSDN博客
下面来看一下读写锁:
读写锁和互斥锁都带有一个锁,那么他们有什么区别呢?
读写锁 | 互斥锁 |
多个读操作可以同时进行 | 一次只有一个线程拥有互斥锁,其他线程只有等待 |
写操作之间必须互斥 | |
读写操作之间也是互斥的,且写操作的应优先于读操作(写操作执行的时候,其他函数都在阻塞) |
上面说到了读写锁和互斥锁的区别,相信大家对读写锁已经有了一定的理解,下面来看读写锁所用到的函数以及头文件:
头文件:#include <pthread.h>
读写锁初始化函数:
int pthread_rwlock_init(pthread_rwlock_t *rwlock, pthread_rwlockattr_t *attr);
第一个参数是读写锁指针,第二个参数是读写锁的属性的指针(一般置为NULL)----下面附上官方手册
读锁:int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
写锁:int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
解锁:int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
销毁锁:int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
函数里面的参数都是所创建的读写锁的指针
下面来看一个代码示例:下面代码是没有加读写锁
Linux多线程的同步------读写锁相关推荐
- Linux多线程开发-线程同步-读写锁pthread_rwlock_t
1.读写锁概念 对资源的访问抽象为两种类型,即独占和共享.独占资源具有排他性,例如写操作.共享资源可以同时由多个线程访问,不对该资源执行写操作.针对资源的读和写操作分别加锁,写操作加锁与互斥锁相同,但 ...
- Linux线程同步读写锁 rwlock
读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁. 1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞: 2 ...
- Linux多线程与同步
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 典型的UNIX系统都支持一个进程创建多个线程(thread).在Linux进程基础 ...
- linux多线程编程——同步与互斥
一. 为什么要用多线程技术? 1.避免阻塞,大家知道,单个进程只有一个主线程,当主线程阻塞的时候,整个进程也就阻塞了,无法再去做其它的一些功能了. 2.避免CPU空转,应用程序经常会涉及到RPC,数据 ...
- Linux多线程的同步-----信号量和互斥锁
前面两篇给基本概念讲过了,大家有兴趣的可以去看一下: Linux多线程_神厨小福贵!的博客-CSDN博客进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度的最小单位进程有自己的独立地 ...
- linux 进程 读写锁,linux 下实现高性能读写锁(read/write lock)
前一篇文章分析了Windows slim read/write lock的工作原理.我们知道它的设计相当精妙,于是我们可以借鉴它的思路来设计linux下的读写锁. 在这个读写锁的设计上,需要注意的是l ...
- linux库函数pthread.h------pthread_rwlock_t读写锁说明
读写锁 索引: 初始化一个读写锁pthread_rwlock_init 读锁定读写锁 pthread_rwlock_rdlock 非阻塞读锁定 pthread_rwlock_tryrdlock 写锁定 ...
- Java多线程编程之读写锁【ReentrantReadWriteLock】
有时候我们需要有这样的需求: 对于同一个文件进行读和写操作,普通的锁是互斥的,这样读的时候会加锁,只能单线程的读,我们希望多线程的进行读操作,并且读的时候不能进行写操作,写的时候不能进 ...
- Linux多线程 | 线程同步
文章目录 前言 主要介绍四种常用的线程同步方式以及相关的函数接口. 一.线程同步 二.同步方法 1.互斥锁 2.信号量 3.条件变量 4.读写锁 总结 前言 主要介绍四种常用的线程同步方式以及相关的函 ...
最新文章
- [Dynamic Language] Python3.7 源码安装 ModuleNotFoundError: No module named '_ctypes' 解决记录...
- Android 开发包括哪些方面?如何提升?
- 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
- FreeSql (十四)批量更新数据
- nginx location 斜杠_【一点资讯】斜杠青年双·11买什么本最划算?光影精灵6让你做“多面娇娃” www.yidianzixun.com...
- JAVA 计算地球上任意两点(经纬度)距离
- cut最后几位 shell_Linux Shell之cut命令
- 浙江省计算机二级c语言分数构成,计算机二级C语言题型和评分标准
- Node单线程高并发原理
- 【20161108】总结
- 基于OpenCV的计算机视觉入门(5)图像美化(上)
- 7. where loop
- 微信小程序开发-新闻简讯demo
- Xshell 5使用教程
- BOS v2.0后台管理系统 JQuery Easyui 相关知识讲解
- 英文打字测试C语言课程设计,语言设计打字练习题库.doc
- 第十人理论 - 大前研一 - 专业主义
- opencv学习日记
- 十进制、八进制和十六进制,各种进制存在的意义,为什么要设计出来?
- ios申请企业开发者账号的代理_苹果企业开发者账号如何申请?