Linux入门:线程同步与互斥(四)——读写锁
来源:互联网 发布:艺术鉴赏网络课答案 编辑:程序博客网 时间:2024/05/22 03:04
读写锁
在编写多线程的时候,有一种情况是非常常见的。那就是,有些公共数据修改的机会比较少,相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这样的代码段加锁,会极大地降低我们程序的效率。因此就需要一种方法,用来专门处理这种多读少写的情况——读写锁。
读写锁实际上是一种特殊的自旋锁(而信号量,互斥锁都是挂起等待锁),它把对共享资源的访问划分成读者和写者,读者只能对共享资源进行读访问,写者需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读写来访问共享资源,最大可能的读者数为实际的逻辑CPU数,写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。
关于读写锁的接口:
程序示例:(基于读写锁的读者/写者问题)
运行结果:
程序代码:
#include <stdio.h>#include <pthread.h>int buf = 0;pthread_rwlock_t rwlock;void *myread(void *arg){while(1){if((pthread_rwlock_tryrdlock(&rwlock)) != 0){printf("writer is writing...");}else{printf("read:%d\n", buf);pthread_rwlock_unlock(&rwlock);sleep(5);}}}void *mywrite(void *arg){while(1){if((pthread_rwlock_tryrdlock(&rwlock)) != 0){printf("reader is reading...");}else{buf++;pthread_rwlock_unlock(&rwlock);}}}int main(){pthread_rwlock_init(&rwlock, NULL);pthread_t id1, id2;pthread_create(&id1, NULL, myread, NULL);pthread_create(&id2, NULL, mywrite, NULL);pthread_join(id1, NULL);pthread_join(id2, NULL);pthread_rwlock_destroy(&rwlock);}
0 0
- Linux入门:线程同步与互斥(四)——读写锁
- 线程间同步与互斥——读写锁
- Java线程(四):JUC包线程互斥与同步以及读写锁
- Linux系统编程——线程同步与互斥:读写锁
- Linux系统编程——线程同步与互斥:读写锁
- 【Linux系统编程】线程同步与互斥:读写锁
- Linux--线程同步与互斥之读写锁
- linux线程同步与互斥-读写锁
- 线程同步与互斥:读写锁
- 线程同步与互斥:读写锁
- 线程互斥与同步(part4)—终结篇:“一股清流”—读写锁(rwlock)
- Linux入门:线程同步与互斥(一)——互斥量
- Linux入门:线程同步与互斥(二)——条件变量
- Linux入门:线程同步与互斥(三)——信号量
- Linux 线程同步机制:互斥、读写锁、条件变量
- <linux线程>同步互斥机制之【读写锁】
- linux互斥与同步 之 自旋锁读写锁
- 线程互斥——互斥锁与读写锁
- Visual Studio工程名、软件名 修改
- 关于jsp页面是放在webroot目录下和web-inf下优缺点
- 将博客搬至CSDN
- css高度自适应的问题
- 系统资源管理工具
- Linux入门:线程同步与互斥(四)——读写锁
- Jquery打造可以上下移动行的表格
- 驱动开发VC2008+WDK7600+DDK1.3a安装图解
- 机器学习-学习1号小分队资料总结01
- JSON.parse()和JSON.stringify()
- 【jQueryEasyUI总结】
- 结构
- Unity Assetbundle的加载方式的效率和内存占用
- 利用Arrays类中的方法对数组进行排序