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时间.内存等)的基本单位. 线程是进程的一个执行流, ...
随机推荐
- Jenkins搭建
1.添加仓库: sudo wget -O /etc/yum.repos.d/jenkins.repo \ http://jenkins-ci.org/redhat/jenkins.repo sudo ...
- ORA-03113:通信通道的文件结尾解决
今天跟往常一样,登陆PL/SQL,确登陆失败,出现一个错误“ORA-01034”和“ORA-27101”如图: 然后就就通过命令提示符去登陆Oracle,去查看怎么回事,然后问题进一步出现,错误“OR ...
- android 入门-布局
android:gravity 针对本view 的位置. android:layout_gravity 本view相对于父布局view的位置. android:layout_alignParentRi ...
- Axure 全局辅助线(转)
普通辅助线作用于当前页 全局作用于所有页面 , 包括新建页面 创建普通辅助线直接拉出来 创建全局辅助线 , 在拉出来的时候按住 Ctrl 默认情况下 , 颜色不同 辅助线可以多选 , 用拖选 或 按 ...
- Open judge C16H:Magical Balls 快速幂+逆元
C16H:Magical Balls 总时间限制: 1000ms 内存限制: 262144kB 描述 Wenwen has a magical ball. When put on an infin ...
- form表单验证和事件
1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...
- 【maven】 在 MyEcplise上使用maven搭建Web项目
二.在My Ecplise上使用Maven搭建Web项目 1.新建一个maven项目 2.create一个简单的骨架 3.就像在ecplise中一样设置项目的以下配置 4.新创建的项目结构如下 ...
- 【虚拟机】苹果虚拟机mac10.11.6+Xcode8.1
[虚拟机]苹果虚拟机mac10.11.6+Xcode8.1本虚拟机加装Xcode8.1,方便大家更好学习Swift3.0语言以及iOS开发.安装注意事项:第一步:确认硬件:1.确认主板以及cpu支持虚 ...
- DZY Loves Sequences
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- javascript选取文档元素
用指定的id属性 用指定的name属性 用指定的标签名字 用指定的CSS类 匹配指定的CSS选择器 通过ID选取元素 var section1 = document.getElementById(&q ...