递归锁
2016-05-18 19:12
501 查看
递归锁在同一线程 内起作用。
[b][cpp] view
plain copy[/b]
//线程属性
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t g_mutex;
void test_fun(void);
static void thread_init(void)
{
//初始化锁的属性
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);//设置锁的属性为可递归
//设置锁的属性
pthread_mutex_init(&g_mutex, &attr);
//销毁
pthread_mutexattr_destroy(&attr);
}
//线程执行函数
void* thr_fun(void* arg)
{
int ret;
ret=pthread_mutex_lock(&g_mutex);
if( ret!=0 )
{
perror("thread pthread_mutex_lock");
exit(1);
}
printf("this is a thread !/n");
test_fun();
ret=pthread_mutex_unlock(&g_mutex);
if( ret!=0 )
{
perror("thread pthread_mutex_unlock");
exit(1);
}
return NULL;
}
//测试函数
void test_fun(void)
{
int ret;
ret=pthread_mutex_lock(&g_mutex);
if( ret!=0 )
{
perror("test pthread_mutex_lock");
exit(1);
}
printf("this is a test!/n");
ret=pthread_mutex_unlock(&g_mutex);
if( ret!=0 )
{
perror("test pthread_mutex_unlock");
exit(1);
}
}
int main(int argc, char *argv[])
{
int ret;
thread_init();
pthread_t tid;
ret=pthread_create(&tid, NULL, thr_fun, NULL);
if( ret!=0 )
{
perror("thread create");
exit(1);
}
pthread_join(tid, NULL);
return 0;
}
执行结果为:
this is a thread !
this is a test!
[b][cpp] view
plain copy[/b]
//线程属性
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
pthread_mutex_t g_mutex;
void test_fun(void);
static void thread_init(void)
{
//初始化锁的属性
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);//设置锁的属性为可递归
//设置锁的属性
pthread_mutex_init(&g_mutex, &attr);
//销毁
pthread_mutexattr_destroy(&attr);
}
//线程执行函数
void* thr_fun(void* arg)
{
int ret;
ret=pthread_mutex_lock(&g_mutex);
if( ret!=0 )
{
perror("thread pthread_mutex_lock");
exit(1);
}
printf("this is a thread !/n");
test_fun();
ret=pthread_mutex_unlock(&g_mutex);
if( ret!=0 )
{
perror("thread pthread_mutex_unlock");
exit(1);
}
return NULL;
}
//测试函数
void test_fun(void)
{
int ret;
ret=pthread_mutex_lock(&g_mutex);
if( ret!=0 )
{
perror("test pthread_mutex_lock");
exit(1);
}
printf("this is a test!/n");
ret=pthread_mutex_unlock(&g_mutex);
if( ret!=0 )
{
perror("test pthread_mutex_unlock");
exit(1);
}
}
int main(int argc, char *argv[])
{
int ret;
thread_init();
pthread_t tid;
ret=pthread_create(&tid, NULL, thr_fun, NULL);
if( ret!=0 )
{
perror("thread create");
exit(1);
}
pthread_join(tid, NULL);
return 0;
}
执行结果为:
this is a thread !
this is a test!
相关文章推荐
- 抽象类和方法
- shell脚本中一些特殊符号
- Fragment源码解析
- hdu2089不要62(数位dp)
- HDU1800
- springmvc http 接口使用 img 方式解决跨域问题
- Android-Context解析,熟视而无睹
- Python笔记之入门(高级篇)
- C语言正则表达式详解 regcomp() regexec() regfree()详解
- 第十一周上机实践项目 项目1-点-圆-圆柱类的设计(2)
- ubuntu 安装Qt4.8.6 X11版
- java中没有sizeof操作符
- veket智能机器人
- 面试常用排序算法
- Volley以及自定义Request详解
- MFC对话框,复选框,单选钮画图
- beego开发web服务+fiddler模拟Post请求+以json类型发送数据
- vim 高级应用
- 虚拟视点图像生成012
- 用数组实现栈和队列