1、读写锁概念

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

优点:互斥锁进入临界区后,未获得锁的线程会阻塞,因此,会降低程序的并发效率。读写锁可以对读操作高效访问,提高资源利用效率,并发性能更高。

POSIX库中用类型pthread_rwlock_t来定义互斥锁,类型在pthreadtypes.h中定义。

2、如何声明一个读写锁

#include <pthread.h>pthread_rwlock_t rwlock;

3、如何初始化一个读写锁

//静态初始化读写锁
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;//动态初始化读写锁
pthread_rwlock_t rwlock;
pthread_rwlock_init(&rwlock,NULL);

静态初始化的读写锁不需要销毁,动态初始化的读写锁需要销毁,销毁函数声明如下:

int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

4、如何上锁和解锁

//读模式:上锁方式1,程序进入临界区,如果写模式已经上锁,则阻塞等待,如果读模式上锁,则获得锁进入临界区
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);//读模式:上锁方式2,程序进入临界区,如果读写已经上锁,不阻塞,返回EBUSY
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);//写模式:上锁方式1,程序进入临界区,如果读写已经上锁,不阻塞,返回EBUSY
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);//写模式:上锁方式2,程序进入临界区,如果读写已经上锁,不阻塞,返回EBUSY
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);//解锁,程序退出临界区
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);

Linux多线程开发-线程同步-读写锁pthread_rwlock_t相关推荐

  1. Linux多线程开发-线程同步-条件变量pthread_cond_t

    1.条件变量的概念 一个线程A的执行需要另一个线程B来唤醒,否则A挂起等待.线程B可以产生线程A继续执行的信号.条件变量常用在共享数据状态变化的场景中,例如:生产则和消费者问题.POSIX线程库提供了 ...

  2. Linux多线程开发-线程同步-互斥锁pthread_mutex_t

    1.互斥锁 同一时刻只允许一个线程对临界区进行访问.POSIX库中用类型pthread_mutex_t来定义互斥锁,类型在pthreadtypes.h中定义. 2.如何声明一个互斥锁 #include ...

  3. 3、Linux多线程,线程同步(转)

    3.Linux多线程,线程同步 5)线程私有数据 进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有.但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread-spec ...

  4. Linux多线程实践(6) --Posix读写锁解决读者写者问题

    Posix读写锁 int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,const pthread_rwlockattr_t *restr ...

  5. Linux线程同步读写锁 rwlock

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

  6. Linux多线程之线程同步

    线程最大的特点就是资源的共享性,所以也就有了一个难点线程同步,实现线程同步的方法最常用的方法是:互斥锁,条件变量和信号量.接下来就让我们来看下这几种同步的方法. 一.互斥锁(Mutex) 获得锁的线程 ...

  7. Linux 多线程开发-线程的属性-分离detached和连接joinable

    1.描述 linux的POSIX线程分离状态决定一个线程以什么方式来终止.默认的分离状态是可连接态(joinable),创建线程是参数设置为NULL,就是默认连接态,可以被pthread_join. ...

  8. Linux 多线程开发-线程的结束pthread_kill和pthread_cancel

    1.线程结束的方式 (1)线程函数中调用pthread_exit函数,不会导致对象析构,可以使用 (2)线程所属的进程结束,进程调用exit,线程C++对象不会销毁,不安全,属于被动结束 (3)线程函 ...

  9. Linux系统开发 | 线程同步与互斥

    拥有梦想是一种智力,实现梦想是一种能力. 概述 线程共享同一进程的地址空间,线程间通过全局变量交换数据进行通信.为了避免多个进程同时访问同一个共享资源而引发冲突,多个线程访问共享数据时需要同步或互斥机 ...

最新文章

  1. Windows Server 2008 R2安装子域控制器
  2. 国内首本免费深度学习书籍!还有人没Get么?
  3. Win下通过 Navica t连接Ubuntu下MySQL数据库
  4. PHP 实现快速排序
  5. 1777:文件结构“图”
  6. [开发技巧3]不显示报表直接打印
  7. jquery一些 事件的用法
  8. 水质php比较低,鱼缸水质的PH太高或太低怎么办?调节PH值一般用以下4件物品
  9. 测试过程中常用的linux命令之【删除指定的文件行】
  10. 单片机c语言程序设计软件下载,《手把手教你学单片机C程序设计》PDF免费版下载...
  11. 谷哥学术2022年资源分享下载列表 5/20
  12. 8类网线利弊_八类网线用过吗?与超五类、六类等网线有啥区别?
  13. 自然语言处理技术及处理框架学习
  14. ZYNQ裸板:LHB155304-RT篇
  15. 怎样架设游戏服务器 怎样搭建一个属于自己的游戏服 5分钟学会游戏架设 3D手游搭建视频教程 自己做游戏GM
  16. 【富文本】CodeBlocks最新版20.03+汉化包云盘下载及用法
  17. 机器学习面试题 (一)
  18. h5页面跳转到微信小程序之利用URL Scheme接口
  19. 从医记之程序员请呵护你的胃
  20. 微信小程序授权_微信小程序授权验证码什么意思

热门文章

  1. [收藏]网络营销十道羊皮卷
  2. 浏览器无法显示某些网页或者提示脚本错误的问题解决
  3. [导入]在C++ Builder3下实现程序自动运行的方法
  4. 深入单例模式 java,深入单例模式四
  5. asp.net Linux 界面,在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法
  6. java中显示动态信息的方法_java里的动态表单技术
  7. python二维数组操作_Python二维数组应用与操作
  8. php如何写一个能让外部访问的接口,如何写一个接口供外界访问
  9. vc c语言坐标图,VC++6.0下C语言画图编程问题
  10. find 命令搜索符号链接文件夹的方法