linux系统编程:线程同步-读写锁(rwlock)
来源:互联网 发布:数组 reverse 编辑:程序博客网 时间:2024/04/29 21:15
线程同步-读写锁(rwlock)
读写锁
读写锁是互斥量的细化:显然,只有对全局资然进行写入操作时,才需要同步;在对全局资然进行读取操作时,是不需要锁的。
相关函数
pthread_rwlock_t //读写锁类型pthread_rwlock_init //初始化pthread_rwlock_destroy //销毁锁pthread_rwlock_rdlock //获取读锁pthread_rwlock_wrlock //获取写锁pthread_rwlock_tryrdlockpthread_rwlock_trywrlockpthread_rwlock_unlock //释放读写锁
示例
#include <stdio.h>#include <unistd.h>#include <pthread.h>pthread_rwlock_t rwlock;int counter = 0;void *fun_r(void *argv){while (1){//既然是读操作,当然可以完全不用锁pthread_rwlock_rdlock(&rwlock);printf("thread %x read,counter=%d\n", pthread_self(), counter);pthread_rwlock_unlock(&rwlock);sleep(1);}}void *fun_w(void *argv){while (1){//写操作,写操作使用写锁pthread_rwlock_wrlock(&rwlock);counter++;printf("thread %x write,counter=%d\n", pthread_self(), counter);pthread_rwlock_unlock(&rwlock);sleep(1);}}int main(void){pthread_rwlock_init(&rwlock, NULL);pthread_t tid[5];int i;//开启2个线程读for (i = 0; i < 2; i++){pthread_create(&tid[i], NULL, fun_r, NULL);}//开启3个线程写for (i = 2; i < 5; i++){pthread_create(&tid[i], NULL, fun_w, NULL);}for (i = 0; i < 5; i++){pthread_join(tid[i], NULL);}pthread_rwlock_destroy(&rwlock);return 0;}
1 0
- linux系统编程:线程同步-读写锁(rwlock)
- Linux线程同步(3): 读写锁(rwlock)
- Linux线程同步(3): 读写锁(rwlock)
- Linux线程同步(3): 读写锁(rwlock)
- Linux线程同步: 读写锁(rwlock)
- Linux线程同步读写锁 rwlock
- Linux线程同步读写锁 rwlock
- Linux线程同步读写锁 rwlock
- Linux线程同步读写锁 rwlock
- 【转】Linux线程同步(3): 读写锁(rwlock)
- Linux线程同步之读写锁(rwlock)
- Linux线程同步之读写锁(rwlock)
- Linux线程同步之读写锁(rwlock)
- 嵌入式 Linux线程同步读写锁rwlock示例
- Linux线程同步之读写锁(rwlock)
- Linux线程同步机制三--读写锁rwlock
- Linux线程同步之读写锁(rwlock)
- 线程的同步之读写锁rwlock(二)
- 解决Android代码中遇到高版本API的错误提示
- 黑马程序员——练习题:向一维数组输入元素并全部输出
- JavaScript的执行上下文
- POM.xml详解
- JavaScript内存泄漏
- linux系统编程:线程同步-读写锁(rwlock)
- 关于树的一些总结
- Common Subsequence-最长公共子序列
- input文本框输入禁止的不同方式
- java多线程学习笔记——读写锁(ReentrantReadWriteLock)
- centos 7 gerrit安装配置
- 如何在一个页面上让多个jQuery版本共存
- Java学习笔记-------Java引出GUI组件的事件 ???
- SwipeRefreshLayout使用心得