线程间的读写锁
来源:互联网 发布:茅台防伪溯源软件下载 编辑:程序博客网 时间:2024/06/06 18:47
共享独占:
读取锁——共享
写入锁——独占
即:读锁可以加多个;有写锁时,读写锁都加不上;有读锁时,可以加读锁而不能加写锁。
静态分配读写锁:
pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
动态分配读写锁:
pthread_rwlock_init(&rwlock,NULL);
pthread_rwlock_destroy(&rwlock);
加读取锁:
int pthread_rwlock_rdlock(pthread_rwlock_t* rwlock);
int pthread_rwlock_tryrdlock(pthread_rwlock_t* rwlock);
加写入锁:
int pthread_rwlock_wrlock(pthread_rwlock_t* rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t* rwlock);
解锁:
int pthread_rwlock_unlock(pthread_rwlock_t* rwlock);
代码:
#include <stdio.h>#include <pthread.h>#include <time.h>pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;int count = 10000;int put_cur = 0;void* search(void* arg){pthread_rwlock_rdlock(&rwlock);printf("%d leave %d\n",(int)arg,count);//usleep(500000);pthread_rwlock_unlock(&rwlock);}void rollback(void* arg){count -= put_cur;printf("rollback %d to %d\n",put_cur,count);pthread_rwlock_unlock(&rwlock);}void* put(void* arg){pthread_cleanup_push(rollback,NULL);pthread_rwlock_wrlock(&rwlock);put_cur = rand()%1000;count += put_cur;printf("%d put %d ok,leave %d\n",(int)arg,put_cur,count);//usleep(500000);pthread_rwlock_unlock(&rwlock);pthread_cleanup_pop(0);}void* hacker(void* arg){sleep(2);pthread_t* ptids = arg;pthread_cancel(ptids[0]);printf("\033[41;34mcancel %lu\033[0m\n",ptids[0]);}void* get(void* arg){pthread_rwlock_wrlock(&rwlock);int cur = rand()%1000;if(count>cur){count -= cur;printf("%d crash %d leave %d\n",(int)arg,cur,count);}else{printf("%d leave not enought %d\n",(int)arg,count);}//usleep(500000);pthread_rwlock_unlock(&rwlock);}int main(){pthread_t tids[100];typedef void*(*func_t)(void*);func_t func_arr[3] = {put,search,get};func_t funcs[100];pthread_setconcurrency(4);int i=0;srand(time(NULL));for(i=0;i<100;i++){funcs[i] = func_arr[rand()%3];}for(i=0;i<100;i++){pthread_create(&tids[i],NULL,funcs[i],i);}for(i=0;i<100;i++){pthread_join(tids[i],NULL);}}
阅读全文
0 0
- 线程间的读写锁
- Linux线程的读写锁
- 线程读写锁的实现
- Linux 下的线程读写锁
- Linux 下的线程读写锁
- Linux 下的线程读写锁
- Linux 下的线程读写锁
- Linux 下的线程读写锁
- java 线程 ReadWriteLock 读写锁的使用
- 线程同步的方式-互斥锁/读写锁
- 线程间_读写锁属性
- 线程间同步机制----读写锁
- linux线程间同步(1)读写锁
- 线程高级---读写锁
- 线程ReadWriteLock 读写锁
- 线程读写锁
- 线程通信----读写锁
- java 线程读写锁
- Android7.0中文文档(API) -- HorizontalScrollView
- 99%的人都理解错了HTTP中GET与POST的区别
- HDU 2003
- 华为帧中继配置
- 几个不错的Android开源音视频播放器
- 线程间的读写锁
- hibernate配置文件hibernate.cfg.xml的详细解释
- 你知道亚媒的来源么?
- PHP字符串比较
- 在LuisDialog中使用PromptDialog
- JS中encodeURIComponent(URL)编码与decodeURIComponent(URL)解码详解
- (1)红帽认证
- 图像卷积与滤波的一些知识点
- Caused by: org.apache.ibatis.binding.BindingException: Parameter 'offset' not found. Available param