读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。
1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞;
2. 当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行枷锁的线程将阻塞;
3. 当读写锁在读模式锁状态时,如果有另外线程试图以写模式加锁读写锁通常会阻塞随后的读模式锁请求,这样可以避免读模式锁长期占用,而等待的写模式锁请求长期阻塞;
这种锁适用对数据结构进行读的次数比写的次数多的情况下,因为可以进行读锁共享。

API接口说明:
1) 初始化和销毁

#include <pthread.h>
int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
成功则返回0, 出错则返回错误编号.

2) 读加锁和写加锁
获取锁的两个函数是阻塞操作

#include <pthread.h>
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);int pthread_rwlock_unlock(pthread_rwlock_t *rwlock); 
成功则返回0, 出错则返回错误编号.

3) 非阻塞获得读锁和写锁
非阻塞的获取锁操作, 如果可以获取则返回0, 否则返回错误的EBUSY.

#include <pthread.h>
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
成功则返回0, 出错则返回错误编号.

From http://www.cnblogs.com/caosiyang/

转载于:https://blog.51cto.com/mike0519/1710042

Linux线程同步读写锁 rwlock相关推荐

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

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

  2. Linux应用开发 - 读写锁

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

  3. linux:线程同步的5种方法

    linux:线程同步的5种方法 一.为什么要使用线程: 二.线程同步的5种方法 2.1 互斥量 2.2 读写锁 2.3 条件变量 2.4 自旋锁 2.5 屏障 一.为什么要使用线程: <1> ...

  4. Linux线程同步(二)---互斥锁实现线程同步

    一 why 先给自己打个广告,本人的微信公众号:嵌入式Linux江湖,主要关注嵌入式软件开发,股票基金定投,足球等等,希望大家多多关注,有问题可以直接留言给我,一定尽心尽力回答大家的问题. 在博客&l ...

  5. linux线程同步的方法

    #Linux 线程同步的三种方法 线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点.linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量和信号量. ##一.互斥锁 ...

  6. linux线程同步(3)-读写锁

    一.概述                                                    读写锁与互斥量的功能类似,对临界区的共享资源进行保护!互斥量一次只让一个线程进入临界区, ...

  7. LINUX线程同步:原子操作、锁、二元信号量、信号量、互斥量、临界区、读写锁、条件变量等

    注:摘自<程序员的自我修养>相关章节. 原子操作 共享数据(全局变量或堆变量)的自增(++)操作在多线程环境下会出现错误是因为这个操作(一条c语句)被编译为汇编代码后不止一条指令,因此在执 ...

  8. Linux多线程的同步------读写锁

    前面介绍过Linux多线程同步的另外两个方法------互斥锁和信号量 Linux多线程的同步-----信号量和互斥锁_神厨小福贵!的博客-CSDN博客 下面来看一下读写锁: 读写锁和互斥锁都带有一个 ...

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

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

最新文章

  1. 使用 Laradock 10 分钟部署 Laravel 或 Notadd 环境
  2. 排序算法 | 简单选择排序,算法的图解、实现、复杂度和稳定性分析
  3. FreeBSD下安装配置Hadoop集群(性能调优)
  4. 我也给要来澳大利亚的虫子们一点建议
  5. JSP中动态includ与静态includ的区别
  6. Nature官方劝退读博:全球七成博士对前途迷茫
  7. php curl 无法获取网页内容,php curl获取网页内容(IPV6下超时)的解决办法
  8. c语言入门函数大全,C语言函数大全(适合初学者).doc
  9. android canvas 工作流_行情艰难,Android初中级面试题助你逆风翻盘,每题都有详细答案...
  10. java nextprime_中国MOOC_零基础学Java语言_第7周 函数_1分解质因数
  11. 忆旧:关于“天网防火墙”的破解
  12. CMMI3认证过程总结
  13. Linux安装maven详细步骤
  14. 德保罗大学计算机专业,德保罗大学计算机金融申请要求及专业介绍
  15. Angular4 - 组件
  16. 数据科学与大数据技术——软科中国大学专业排名
  17. git上传代码到指定分支
  18. 002稀疏数组和队列[超大章]
  19. Java——Jsoup方式的IP代理服务器的使用
  20. 老韩思考:为什么毕业后3年,同学之间相差如此大?

热门文章

  1. linux内核的编译
  2. shell中if条件字符串、数字比对,` `和[ ]区别
  3. 2016.01.10 论文扩充、精修、查重
  4. Windows To Go,让Windows 8移动起来!
  5. 点评2009年PHP十大图书(2)
  6. 动态设置HTML:v-html
  7. 【Python基础】with语句
  8. AB=C型向量分解思路思考
  9. 验证二叉树后序遍历序列是否符合要求
  10. Transformer入门Transformer和CNN之间的区别