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. go-martini 简单分析之二

    martini.go 对路由采用正则表达式处理,最终转化成正则表达式. 添加route对应的调用栈 按照生成,验证,添加的步骤 route := newRoute(method, pattern, h ...

  2. wp8 入门到精通 Gallery

    <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.Resources> ...

  3. hdu 2516 FIB博弈

    分析请看:cxlove #include<iostream> #include<cstdio> #include<cstring> #include<algo ...

  4. ServerSocket 默认邦定IP

    转自:http://cuisuqiang.iteye.com/blog/2037769 开发中需要开启服务端的时候,本地测试都是直接写端口,实际环境也是需要指定要邦定的IP才可以. 因为对于服务器来说 ...

  5. 学习iOS的网站

    ios开发者 http://www.codeios.com/   cocoachina http://www.cocoachina.com   code4app http://code4app.com ...

  6. orientation和gravity的区别

    orientation:决定UI组件是按行还是列显示 gravity:指定文字对齐方式.

  7. ios摇一摇截屏代码

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  8. 各种编码问题产生原因以及解决办法---------响应编码,请求编码,URL编码

     响应编码 产生原因以及解决办法: 示例: package cn.yzu; import java.io.IOException; import javax.servlet.ServletExcept ...

  9. 【JDBC 报错】Connections could not be acquired from the underlying database!

    项目启动报错: [2016-07-13 10:04:15,074] ERROR org.apache.ibatis.executor.BaseExecutor Could not get a data ...

  10. DrawerLayout的使用

    一:首先是DrawerLayout的布局 <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout& ...