读写锁pthread_rwlock_t的使用
来源:互联网 发布:大智慧mac版好用吗 编辑:程序博客网 时间:2024/06/05 18:03
转载自: http://blog.csdn.net/wonderisland/article/details/16940925
读写锁是用来解决读者写者问题的,读操作可以共享,写操作是排他的,读可以有多个在读,写只有唯一个在写,同时写的时候不允许读。
具有强读者同步和强写者同步两种形式
强读者同步:当写者没有进行写操作,读者就可以访问;
强写者同步:当所有写者都写完之后,才能进行读操作,读者需要最新的信息,一些事实性较高的系统可能会用到该所,比如定票之类的。
读写锁的操作:
读写锁的初始化:
定义读写锁: pthread_rwlock_t m_rw_lock;
函数原型: pthread_rwlock_init(pthread_rwlock_t * ,pthread_rwattr_t *);
返回值:0,表示成功,非0为一错误码
读写锁的销毁:
函数原型: pthread_rwlock_destroy(pthread_rwlock_t* );
返回值:0,表示成功,非0表示错误码
获取读写锁的读锁操作:分为阻塞式获取和非阻塞式获取,如果读写锁由一个写者持有,则读线程会阻塞直至写入者释放读写锁。
阻塞式:
函数原型:pthread_rwlock_rdlock(pthread_rwlock_t*);
非阻塞式:
函数原型:pthread_rwlock_tryrdlock(pthread_rwlock_t*);
返回值: 0,表示成功,非0表示错误码,非阻塞会返回ebusy而不会让线程等待
获取读写锁的写锁操作:分为阻塞和非阻塞,如果对应的读写锁被其它写者持有,或者读写锁被读者持有,该线程都会阻塞等待。
阻塞式:
函数原型:pthread_rwlock_wrlock(pthread_rwlock_t*);
非阻塞式:
函数原型:pthread_rwlock_trywrlock(pthread_rwlock_t*);
返回值: 0,表示成功
释放读写锁:
函数原型:pthread_rwlock_unlock(pthread_rwlock_t*);
总结(转):
互斥锁与读写锁的区别:
当访问临界区资源时(访问的含义包括所有的操作:读和写),需要上互斥锁;
当对数据(互斥锁中的临界区资源)进行读取时,需要上读取锁,当对数据进行写入时,需要上写入锁。
读写锁的优点:
对于读数据比修改数据频繁的应用,用读写锁代替互斥锁可以提高效率。因为使用互斥锁时,即使是读出数据(相当于操作临界区资源)都要上互斥锁,而采用读写锁,则可以在任一时刻允许多个读出者存在,提高了更高的并发度,同时在某个写入者修改数据期间保护该数据,以免任何其它读出者或写入者的干扰。
读写锁描述:
获取一个读写锁用于读称为共享锁,获取一个读写锁用于写称为独占锁,因此这种对于某个给定资源的共享访问也称为共享-独占上锁。
有关这种类型问题(多个读出者和一个写入者)的其它说法有读出者与写入者问题以及多读出者-单写入者锁。
- 读写锁pthread_rwlock_t的使用
- 读写锁pthread_rwlock_t的使用
- 读写锁pthread_rwlock_t的使用
- 读写锁pthread_rwlock_t的使用
- 读写锁pthread_rwlock_t的使用
- 使用读写锁pthread_rwlock_t未定义的问题
- linux使用读写锁pthread_rwlock_t
- linux使用读写锁pthread_rwlock_t
- linux使用读写锁pthread_rwlock_t
- linux使用读写锁pthread_rwlock_t
- linux使用读写锁pthread_rwlock_t
- linux使用读写锁pthread_rwlock_t
- linux使用读写锁pthread_rwlock_t
- pthread读写锁pthread_rwlock_t
- Android2.2:'pthread_rwlock_t' does not name a type: android 2.3版本以下不支持读写锁的解决办法
- pthread_rwlock_t
- 读写锁的使用
- ReentrantReadWriteLock读写锁的使用
- 线性结构------共享栈
- TitleBar 自定义布局
- 请告诉美工Android适配时切图要按标准来
- SVN 分支合并踩坑指南
- 顺序表、链表
- 读写锁pthread_rwlock_t的使用
- edittext光标位置
- s5pv210 android hdmi与LCD异步显示之fb2多线程操作驱动修改
- org.hibernate.HibernateException: No CurrentSessionContext configured!
- IOS安全–了解Mach-o文件结构
- 工业串口和网络软件通讯平台-快速构建自己的平台和开发设备
- Linux内核中双向链表的经典实现
- React-Native学习指南
- linux kernel Kconfig warning: leading whitespace ignored