博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux下使用线程锁互斥访问资源
阅读量:6325 次
发布时间:2019-06-22

本文共 2374 字,大约阅读时间需要 7 分钟。

linux使用线程锁访问互斥资源:

1、线程锁的创建 

pthread_mutex_t g_Mutex;

 

2、完整代码如下

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 #define READ_TIME 20000 10 #define WRITE_TIME 30000 11 12 pthread_mutex_t g_Mutex; 13 int g_iX = 0; 14 int g_rwok = 0; 15 16 bool bExit = false; 17 18 void sig(int signal) 19 { 20 bExit = true; 21 } 22 23 /* writer pthread, write per 30000 us */ 24 void * writer(void * arg) 25 { 26 while(1) 27 { 28 if(true == bExit) 29 { 30 g_rwok++; 31 break; 32 } 33 if(EBUSY != pthread_mutex_trylock(&g_Mutex)) 34 { 35 printf("\033[0;32mwriter : lock, write begin\033[0m\n"); 36 g_iX = 1; 37 usleep(WRITE_TIME); 38 pthread_mutex_unlock(&g_Mutex); 39 printf("\033[0;32mwriter : write ok, unlock\033[0m\n"); 40 } 41 else 42 { 43 printf("\033[0;32mwriter : \033[0;31mbusy , can not write\033[0m\n"); 44 } 45 usleep(WRITE_TIME); 46 } 47 48 return NULL; 49 } 50 51 /* reader pthread, read per 20000 us */ 52 void * reader(void * arg) 53 { 54 while(1) 55 { 56 if(true == bExit) 57 { 58 g_rwok++; 59 break; 60 } 61 if(EBUSY != pthread_mutex_trylock(&g_Mutex)) 62 { 63 printf("\033[0;33mreader : lock\033[0m\n"); 64 g_iX = 0; 65 usleep(READ_TIME); 66 pthread_mutex_unlock(&g_Mutex); 67 printf("\033[0;33mreader : unlock , read ok\033[0m\n"); 68 } 69 else 70 { 71 printf("\033[0;33mreader : \033[0;31mbusy , can not read\033[0m\n"); 72 } 73 usleep(READ_TIME); 74 } 75 76 return NULL; 77 } 78 79 int main(int argc, char *argv[]) 80 { 81 signal(SIGINT, sig); 82 memset(&g_Mutex, sizeof(g_Mutex), 0); 83 pthread_mutex_init(&g_Mutex, NULL); 84 85 pthread_t preader, pwriter; 86 pthread_create(&preader, NULL, reader, NULL); 87 pthread_create(&pwriter, NULL, writer, NULL); 88 while(1) 89 { 90 if(true == bExit && 2 == g_rwok) 91 { 92 break; 93 } 94 usleep(100000); 95 } 96 pthread_mutex_destroy(&g_Mutex); 97 printf("\033[0;33mdestroy mutex\033[0m\n"); 98 99 return 0;100 }

3、运行结果如下

reader : lockwriter : busy , can not writereader : unlock , read okwriter : lock, write beginreader : busy , can not readwriter : write ok, unlockreader : lockreader : unlock , read okwriter : lock, write beginreader : busy , can not readwriter : write ok, unlock

本文转自郝峰波博客园博客,原文链接:http://www.cnblogs.com/fengbohello/p/4112679.html,如需转载请自行联系原作者

你可能感兴趣的文章
C语言综合实验3—计算器四则运算
查看>>
深入JUnit源码之Runner
查看>>
OC之NSString
查看>>
Spring定时实际项目运用
查看>>
第六章、输入输出系统
查看>>
Mysql存储引擎
查看>>
跟我一起数据挖掘(21)——redis
查看>>
ubuntu 12.04 apt-get安装配置阿里云OCS的php支持
查看>>
GridView实战一:自定义分页、排序、修改、插入、删除
查看>>
高级Bash脚本编程入门
查看>>
OpenStack-Icehouse(nova-network)多节点基础环境部署
查看>>
SVM-支持向量机详解(三)
查看>>
Markdown syntax guide and writing on MWeb
查看>>
《Netty 权威指南》—— NIO客户端序列图
查看>>
【AIX 命令学习】lsdev -P -r class 查看系统所支持的设备
查看>>
iOS全局处理键盘事件
查看>>
java和python改变全局变量的对比
查看>>
[LeetCode]12.Integer to Roman
查看>>
JAVA简易WEB服务器(五)
查看>>
hdu 1406
查看>>