Linux多线程开发-线程同步-读写锁pthread_rwlock_t
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相关推荐
- Linux多线程开发-线程同步-条件变量pthread_cond_t
1.条件变量的概念 一个线程A的执行需要另一个线程B来唤醒,否则A挂起等待.线程B可以产生线程A继续执行的信号.条件变量常用在共享数据状态变化的场景中,例如:生产则和消费者问题.POSIX线程库提供了 ...
- Linux多线程开发-线程同步-互斥锁pthread_mutex_t
1.互斥锁 同一时刻只允许一个线程对临界区进行访问.POSIX库中用类型pthread_mutex_t来定义互斥锁,类型在pthreadtypes.h中定义. 2.如何声明一个互斥锁 #include ...
- 3、Linux多线程,线程同步(转)
3.Linux多线程,线程同步 5)线程私有数据 进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有.但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread-spec ...
- Linux多线程实践(6) --Posix读写锁解决读者写者问题
Posix读写锁 int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,const pthread_rwlockattr_t *restr ...
- Linux线程同步读写锁 rwlock
读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁. 1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞: 2 ...
- Linux多线程之线程同步
线程最大的特点就是资源的共享性,所以也就有了一个难点线程同步,实现线程同步的方法最常用的方法是:互斥锁,条件变量和信号量.接下来就让我们来看下这几种同步的方法. 一.互斥锁(Mutex) 获得锁的线程 ...
- Linux 多线程开发-线程的属性-分离detached和连接joinable
1.描述 linux的POSIX线程分离状态决定一个线程以什么方式来终止.默认的分离状态是可连接态(joinable),创建线程是参数设置为NULL,就是默认连接态,可以被pthread_join. ...
- Linux 多线程开发-线程的结束pthread_kill和pthread_cancel
1.线程结束的方式 (1)线程函数中调用pthread_exit函数,不会导致对象析构,可以使用 (2)线程所属的进程结束,进程调用exit,线程C++对象不会销毁,不安全,属于被动结束 (3)线程函 ...
- Linux系统开发 | 线程同步与互斥
拥有梦想是一种智力,实现梦想是一种能力. 概述 线程共享同一进程的地址空间,线程间通过全局变量交换数据进行通信.为了避免多个进程同时访问同一个共享资源而引发冲突,多个线程访问共享数据时需要同步或互斥机 ...
最新文章
- Windows Server 2008 R2安装子域控制器
- 国内首本免费深度学习书籍!还有人没Get么?
- Win下通过 Navica t连接Ubuntu下MySQL数据库
- PHP 实现快速排序
- 1777:文件结构“图”
- [开发技巧3]不显示报表直接打印
- jquery一些 事件的用法
- 水质php比较低,鱼缸水质的PH太高或太低怎么办?调节PH值一般用以下4件物品
- 测试过程中常用的linux命令之【删除指定的文件行】
- 单片机c语言程序设计软件下载,《手把手教你学单片机C程序设计》PDF免费版下载...
- 谷哥学术2022年资源分享下载列表 5/20
- 8类网线利弊_八类网线用过吗?与超五类、六类等网线有啥区别?
- 自然语言处理技术及处理框架学习
- ZYNQ裸板:LHB155304-RT篇
- 怎样架设游戏服务器 怎样搭建一个属于自己的游戏服 5分钟学会游戏架设 3D手游搭建视频教程 自己做游戏GM
- 【富文本】CodeBlocks最新版20.03+汉化包云盘下载及用法
- 机器学习面试题 (一)
- h5页面跳转到微信小程序之利用URL Scheme接口
- 从医记之程序员请呵护你的胃
- 微信小程序授权_微信小程序授权验证码什么意思
热门文章
- [收藏]网络营销十道羊皮卷
- 浏览器无法显示某些网页或者提示脚本错误的问题解决
- [导入]在C++ Builder3下实现程序自动运行的方法
- 深入单例模式 java,深入单例模式四
- asp.net Linux 界面,在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法
- java中显示动态信息的方法_java里的动态表单技术
- python二维数组操作_Python二维数组应用与操作
- php如何写一个能让外部访问的接口,如何写一个接口供外界访问
- vc c语言坐标图,VC++6.0下C语言画图编程问题
- find 命令搜索符号链接文件夹的方法