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下使用线程锁互斥访问资源的更多相关文章

  1. linux下的同步与互斥

    linux下的同步与互斥 谈到linux的并发,必然涉及到线程之间的同步和互斥,linux主要为我们提供了几种实现线程间同步互斥的 机制,本文主要介绍互斥锁,条件变量和信号量.互斥锁和条件变量包含在p ...

  2. 线程锁(互斥锁Mutex)及递归锁

    一.线程锁(互斥锁) 在一个程序内,主进程可以启动很多个线程,这些线程都可以访问主进程的内存空间,在Python中虽然有了GIL,同一时间只有一个线程在运行,可是这些线程的调度都归系统,操作系统有自身 ...

  3. 线程锁(互斥锁Mutex)

    线程锁(互斥锁Mutex) 一个进程下可以启动多个线程,多个线程共享父进程的内存空间,也就意味着每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据,会出现什么状况? # -*- cod ...

  4. ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访问(转)

    转自:http://blog.csdn.net/pennyliang/article/details/8556662 ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访 ...

  5. 【转】Linux下nginx配置https协议访问的方法

    一.配置nginx支持https协议访问,需要在编译安装nginx的时候添加相应的模块--with-http_ssl_module 查看nginx编译参数:/usr/local/nginx/sbin/ ...

  6. Linux下查看线程数的几种方法汇总

    Linux下查看线程数的几种方法汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux下查看某个进程的线程数量 pstree命令以树状图显示进程间的关系(display ...

  7. python网络编程--线程锁(互斥锁Mutex)

    一:为什么需要线程锁 一个进程下可以启动多个线程,多个线程共享父进程的内存空间,也就意味着每个线程可以访问同一份数据,此时,如果2个线程同时要修改同一份数据,会出现什么状况? 很简单,假设你有A,B两 ...

  8. Linux下Java线程具体监控和其dump的分析使用----分析Java性能瓶颈[张振华-Jack]

    作者:张振华(Jack) 这里对linux下.sun(oracle) JDK的线程资源占用问题的查找步骤做一个小结: linux环境下,当发现java进程占用CPU资源非常高,且又要想更进一步查出哪一 ...

  9. Linux下进程线程,Nignx与php-fpm的进程线程方式

    1.进程与线程区别 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流, ...

随机推荐

  1. supervisor使用

    supervisor是一个C/S系统,它可以在类unix操作系统让用户来监视和控制后台服务进程的数量,一个很重要的功能就是监控服务器的主要后台进程,并在出现问题是自动重启. 根据服务器上的python ...

  2. TensorFlow

    转自:http://blog.csdn.net/stdcoutzyx/article/details/51645396 本片博文是参考文献[1]的阅读笔记,特此声明 TensorFlow,以下简称TF ...

  3. C# 指针操作图像 细化处理

    /// <summary> /// 图形细化 /// </summary> /// <param name="srcImg"></para ...

  4. C# 对象转换为byte[] ,byte[]还原对象

    /// <summary>  /// 将一个object对象序列化,返回一个byte[]          /// </summary>  /// <param name ...

  5. C#联通新版验证码识别的实现

    以前写了篇 联通充值卡自动充值的实现,最近发现联通官网改版了,随便看了下发现新版的验证码和以前的不同,发了点时间研究了下他的识别码,它现在的验证码如下 现在将识别步骤说下 1,转换灰度图片 2,清除2 ...

  6. BZOJ 1588: [HNOI2002]营业额统计 双向链表 / splay / treap

    1588: [HNOI2002]营业额统计 Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger ...

  7. 【rqnoj39】 饮食问题

    题目描述 Bessie 正在减肥,所以她规定每天不能吃超过 C (10 <= C <= 35,000)卡路里的食物.农民 John 在戏弄她,在她面前放了B (1 <= B < ...

  8. uri,url.urn

    uri:Web上可用的每种资源 - HTML文档.图像.视频片段.程序等 - 由一个通过通用资源标志符(Universal Resource Identifier, 简称"URI" ...

  9. minix3(一)安装以及编辑文件

    作为一条通信狗,最近开始自学操作系统.听说用MINIX3学操作系统很好,就决定跟UCSB的课程试试. 首先在虚拟机上安装MINIX3. 开始用的VM Station,按照百度文库里安装minix3的教 ...

  10. POJ 1008 Maya Calendar

    链接:http://poj.org/problem?id=1008 Maya Calendar Time Limit: 1000MS   Memory Limit: 10000K Total Subm ...