您的位置:首页 > 其它

递归锁

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!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: