linux下使用线程锁互斥访问资源
linux使用线程锁访问互斥资源:
1、线程锁的创建
- pthread_mutex_t g_Mutex;
2、完整代码如下
- #include <stdio.h>
- #include <string.h>
- #include <pthread.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <errno.h>
- #include <signal.h>
- #define READ_TIME 20000
- #define WRITE_TIME 30000
- pthread_mutex_t g_Mutex;
- int g_iX = ;
- int g_rwok = ;
- bool bExit = false;
- void sig(int signal)
- {
- bExit = true;
- }
- /* writer pthread, write per 30000 us */
- void * writer(void * arg)
- {
- while()
- {
- if(true == bExit)
- {
- g_rwok++;
- break;
- }
- if(EBUSY != pthread_mutex_trylock(&g_Mutex))
- {
- printf("\033[0;32mwriter : lock, write begin\033[0m\n");
- g_iX = ;
- usleep(WRITE_TIME);
- pthread_mutex_unlock(&g_Mutex);
- printf("\033[0;32mwriter : write ok, unlock\033[0m\n");
- }
- else
- {
- printf("\033[0;32mwriter : \033[0;31mbusy , can not write\033[0m\n");
- }
- usleep(WRITE_TIME);
- }
- return NULL;
- }
- /* reader pthread, read per 20000 us */
- void * reader(void * arg)
- {
- while()
- {
- if(true == bExit)
- {
- g_rwok++;
- break;
- }
- if(EBUSY != pthread_mutex_trylock(&g_Mutex))
- {
- printf("\033[0;33mreader : lock\033[0m\n");
- g_iX = ;
- usleep(READ_TIME);
- pthread_mutex_unlock(&g_Mutex);
- printf("\033[0;33mreader : unlock , read ok\033[0m\n");
- }
- else
- {
- printf("\033[0;33mreader : \033[0;31mbusy , can not read\033[0m\n");
- }
- usleep(READ_TIME);
- }
- return NULL;
- }
- int main(int argc, char *argv[])
- {
- signal(SIGINT, sig);
- memset(&g_Mutex, sizeof(g_Mutex), );
- pthread_mutex_init(&g_Mutex, NULL);
- pthread_t preader, pwriter;
- pthread_create(&preader, NULL, reader, NULL);
- pthread_create(&pwriter, NULL, writer, NULL);
- while()
- {
- if(true == bExit && == g_rwok)
- {
- break;
- }
- usleep();
- }
- pthread_mutex_destroy(&g_Mutex);
- printf("\033[0;33mdestroy mutex\033[0m\n");
- return ;
- }
3、运行结果如下
- reader : lock
- writer : busy , can not write
- reader : unlock , read ok
- writer : lock, write begin
- reader : busy , can not read
- writer : write ok, unlock
- reader : lock
- reader : unlock , read ok
- writer : lock, write begin
- reader : busy , can not read
- writer : write ok, unlock
linux下使用线程锁互斥访问资源的更多相关文章
- linux下的同步与互斥
linux下的同步与互斥 谈到linux的并发,必然涉及到线程之间的同步和互斥,linux主要为我们提供了几种实现线程间同步互斥的 机制,本文主要介绍互斥锁,条件变量和信号量.互斥锁和条件变量包含在p ...
- 线程锁(互斥锁Mutex)及递归锁
一.线程锁(互斥锁) 在一个程序内,主进程可以启动很多个线程,这些线程都可以访问主进程的内存空间,在Python中虽然有了GIL,同一时间只有一个线程在运行,可是这些线程的调度都归系统,操作系统有自身 ...
- 线程锁(互斥锁Mutex)
线程锁(互斥锁Mutex) 一个进程下可以启动多个线程,多个线程共享父进程的内存空间,也就意味着每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据,会出现什么状况? # -*- cod ...
- ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访问(转)
转自:http://blog.csdn.net/pennyliang/article/details/8556662 ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访 ...
- 【转】Linux下nginx配置https协议访问的方法
一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...
- Linux下查看线程数的几种方法汇总
Linux下查看线程数的几种方法汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux下查看某个进程的线程数量 pstree命令以树状图显示进程间的关系(display ...
- python网络编程--线程锁(互斥锁Mutex)
一:为什么需要线程锁 一个进程下可以启动多个线程,多个线程共享父进程的内存空间,也就意味着每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据,会出现什么状况? 很简单,假设你有A,B两 ...
- Linux下Java线程具体监控和其dump的分析使用----分析Java性能瓶颈[张振华-Jack]
作者:张振华(Jack) 这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: linux环境下,当发现java进程占用CPU资源非常高,且又要想更进一步查出哪一 ...
- Linux下进程线程,Nignx与php-fpm的进程线程方式
1.进程与线程区别 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流, ...
随机推荐
- 解决css样式被内置样式覆盖的问题
.preImg { height:400px !important } <img id="preImg" class="preImg" style=&qu ...
- phpMailer邮件发送
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 一个java覆盖的例子
// 覆盖class P{}class Q extends P{} class a{ static void m1(float x){ //静态方法不能被覆盖 System.out.println(& ...
- DOM--3 DOM核心和DOM2 HTML(2)
核心Node对象 由于继承扩展的关系,DOM中大部分对象会有Node对象的属性和方法,其中包括: nodeName DOM2核心中规定的每种nodeType预期的nodeName值 对象 返回值 El ...
- 00_Java基本常识
1. 基本常识 软件:一系列按照特定顺序组织的计算机数据和指令的集合. 常见的软件:系统软件 和 应用软件. 人机交互:图形化界面.命令行方式 计算机语言:人与计算机交流的方式 dos常见命令 ...
- BZOJ 3282 Tree ——KD-Tree
[题目分析] 明显的LCT维护连通性的题目. access的操作是比较巧妙的,可以把结点到根变成偏爱路径,而且保证了该点是链上深度最深的点. 而且需边的思想也很巧妙,保证了复杂度. 但是只能用于修改路 ...
- AngularJS html+DOM+ng-click事件
ng-disabled 指令直接绑定应用程序数据到 HTML 的 disabled 属性. ng-show 指令用于设置应用部分是否可见. ng-show="true" 设置 HT ...
- BFS(染色) LA 3977 Summits
题目传送门 题意:题意坑爹.问符合条件的的山顶个数 分析:降序排序后从每个点出发,假设为山顶,如果四周的点的高度>h - d那么可以走,如果走到已经走过的点且染色信息(山顶高度)不匹配那么就不是 ...
- docker 1.0.0发布以及一个bug依赖apparmor_parser
6月10号docker 1.0稳定版本发布,找了台ubuntu的机器,装了下 ubuntu version:12.04 docker version:1.0.0 装docker的步骤可以看官方文档:h ...
- git 回滚
git reset --hard HEAD~10 可以通过上面的命令会退到最初的版本查看源代码, git reset --hard 4aa9a32d1625997ef5b28463ccde78d711 ...