前面介绍过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多线程的同步------读写锁相关推荐

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

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

  2. Linux线程同步读写锁 rwlock

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

  3. Linux多线程与同步

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 典型的UNIX系统都支持一个进程创建多个线程(thread).在Linux进程基础 ...

  4. linux多线程编程——同步与互斥

    一. 为什么要用多线程技术? 1.避免阻塞,大家知道,单个进程只有一个主线程,当主线程阻塞的时候,整个进程也就阻塞了,无法再去做其它的一些功能了. 2.避免CPU空转,应用程序经常会涉及到RPC,数据 ...

  5. Linux多线程的同步-----信号量和互斥锁

    前面两篇给基本概念讲过了,大家有兴趣的可以去看一下: Linux多线程_神厨小福贵!的博客-CSDN博客进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度的最小单位进程有自己的独立地 ...

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

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

  7. linux库函数pthread.h------pthread_rwlock_t读写锁说明

    读写锁 索引: 初始化一个读写锁pthread_rwlock_init 读锁定读写锁 pthread_rwlock_rdlock 非阻塞读锁定 pthread_rwlock_tryrdlock 写锁定 ...

  8. Java多线程编程之读写锁【ReentrantReadWriteLock】

    有时候我们需要有这样的需求:         对于同一个文件进行读和写操作,普通的锁是互斥的,这样读的时候会加锁,只能单线程的读,我们希望多线程的进行读操作,并且读的时候不能进行写操作,写的时候不能进 ...

  9. Linux多线程 | 线程同步

    文章目录 前言 主要介绍四种常用的线程同步方式以及相关的函数接口. 一.线程同步 二.同步方法 1.互斥锁 2.信号量 3.条件变量 4.读写锁 总结 前言 主要介绍四种常用的线程同步方式以及相关的函 ...

最新文章

  1. [Dynamic Language] Python3.7 源码安装 ModuleNotFoundError: No module named '_ctypes' 解决记录...
  2. Android 开发包括哪些方面?如何提升?
  3. 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
  4. FreeSql (十四)批量更新数据
  5. nginx location 斜杠_【一点资讯】斜杠青年双·11买什么本最划算?光影精灵6让你做“多面娇娃” www.yidianzixun.com...
  6. JAVA 计算地球上任意两点(经纬度)距离
  7. cut最后几位 shell_Linux Shell之cut命令
  8. 浙江省计算机二级c语言分数构成,计算机二级C语言题型和评分标准
  9. Node单线程高并发原理
  10. 【20161108】总结
  11. 基于OpenCV的计算机视觉入门(5)图像美化(上)
  12. 7. where loop
  13. 微信小程序开发-新闻简讯demo
  14. Xshell 5使用教程
  15. BOS v2.0后台管理系统 JQuery Easyui 相关知识讲解
  16. 英文打字测试C语言课程设计,语言设计打字练习题库.doc
  17. 第十人理论 - 大前研一 - 专业主义
  18. opencv学习日记
  19. 十进制、八进制和十六进制,各种进制存在的意义,为什么要设计出来?
  20. ios申请企业开发者账号的代理_苹果企业开发者账号如何申请?

热门文章

  1. CodeGen准备存储库
  2. Nsight Compute Profilier 分析
  3. 自动驾驶系统关系与自动泊车原理
  4. 画笔Paint的使用
  5. C++ #include 指令
  6. java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode
  7. iOS开发8:使用Tool Bar切换视图
  8. MFC控件编程之复选框单选框分组框
  9. 2022-2028年中国K酸行业发展现状及前瞻分析报告
  10. Magent搭建Memcached集群