Linux--多线程读写锁问题
来源:互联网 发布:中研世纪 知乎 编辑:程序博客网 时间:2024/05/24 03:44
下面的案例是多个线程访问一个公共缓冲的处理,采用读写锁。需要注意的是代码中注释的地方。起初是将sleep放在unlock之前,这样的问题是,每次读线程读取完之后就直接睡眠导致写线程得到不到锁。由于写线程的写锁是独占的,需要保证读写锁没有被其他线程占用。
#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <string.h>#include <time.h>pthread_rwlock_t rwlock;char *contents = NULL;void *worker(void *arg){char *worker_name = (char *)arg;while(1){pthread_rwlock_rdlock(&rwlock);printf("%s need to work, time[%s]\n", worker_name, contents);//这里需要注意---------------------pthread_rwlock_unlock(&rwlock);sleep(1);}return (void *)0;}void *timer(void *arg){while(1){time_t tt = time(NULL);pthread_rwlock_wrlock(&rwlock);memset(contents, 0x0, 64 * sizeof(char));ctime_r(&tt, contents);if (contents[strlen(contents) -1] == '\n'){contents[strlen(contents) -1] = 0;}pthread_rwlock_unlock(&rwlock);}pthread_exit((void *)0);}int main(){pthread_t rd_th1, rd_th2, rd_th3;pthread_t wr_th1;contents = (char *)malloc(64 * sizeof(char));if (!contents){printf("malloc error\n");return -1;}memset(contents, 0x0, 64 * sizeof(char));pthread_rwlock_init(&rwlock, NULL);pthread_create(&rd_th1, NULL, worker, (void *)"lily");pthread_create(&rd_th2, NULL, worker, (void *)"hanmeimei");pthread_create(&rd_th3, NULL, worker, (void *)"lucy");pthread_create(&wr_th1, NULL, timer, NULL);pthread_join(rd_th1, NULL);pthread_join(rd_th2, NULL);pthread_join(rd_th3, NULL);pthread_join(wr_th1, NULL);pthread_rwlock_destroy(&rwlock);return 0;}
0 0
- Linux--多线程读写锁问题
- linux多线程之读写锁
- 【Linux多线程同步】读写锁
- linux多线程之读写锁
- LINUX 多线程互斥量和读写锁区别
- LINUX多线程互斥量和读写锁区别
- LINUX多线程互斥量和读写锁区别
- LINUX多线程互斥量和读写锁区别
- Linux多线程同步之读写锁
- Linux --多线程之读写锁1
- Linux --多线程之读写锁2
- Linux多线程编程(四)-----读写锁
- Linux多线程实践(6) --Posix读写锁解决读者写者问题
- Linux多线程实践(6) --Posix读写锁解决读者写者问题
- Linux多线程实践(6) --Posix读写锁(解决读者写者问题)
- 研究WIN/Linux下多线程读写文件问题
- JAVA多线程之生产者消费者问题&&读写锁问题
- IOS多线程读写Sqlite问题
- 获取当前浏览器的类型和版本号
- Collatz序列的Python实现
- ioctl函数详解
- linux平台中c代码调用c++动态库
- getprop (dns)
- Linux--多线程读写锁问题
- win32判断当前进程是否是64位
- C很简单,但是你真的这些都会吗?
- 将 C++ Qt 程序移植至 Linux 系统
- nginx启动、停止、重启命令
- jeesz分布式架构技术springmvc+mybatis+shiro dubbo zookeeper redis分布式缓存 ehcache fastdfs restful 服务 maven
- 安装Piwik时遇到的一个奇怪的关于PHP参数问题的解决办法
- 多线程简介
- MySQL分库分表的一些技巧