linux线程笔记4

互斥锁属性创建和销毁

     
 #include <pthread.h>
       int pthread_mutexattr_init(pthread_mutexattr_t *attr);
       int pthread_mutexattr_destroy(pthread_mutexattr *attr);

返回值:成功返回0 ,出错返回错误编号
参数:attr:互斥锁属性

互斥锁进程共享属性操作

#include <pthread.h>
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *restrict attr,int *restrict pshared);
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr,int pshared);
返回值:成功返回0,出错返回错误编号
参数:attr:互斥锁属性
pshared:共享进程属性
PTHREAD_PROCESS_PRIVATE(默认) //锁只能用于一个进程内部的两个线程进行互斥
PTHREAD+PROCESS_SHARED //锁可以用于两个不同进程中的线程进行互斥

互斥锁类型操作

#include <pthread.h>
int pthread_mutexattr_gettype(const pthread_mutexattr_t *restrict attr,int *restrict type);
int pthread_mutexattr_settype(const pthread_mutexattr_t *attr,int type);
返回值:成功返回0 ,出错返回错误编号
参数: attr:互斥锁属性
type:互斥锁类型
标准互斥锁:PTHREAD_MUTEX_NORMAL
第一次上锁成功,第二次上锁会阻塞
递归互斥锁:PTHREAD_MUTEX_RECURSIVE
第一次上锁成功,第二次以上上锁还是成功,内部计数
检错互斥锁:PTHREAD_MUTEX_ERRORCHECK
第一次上锁成功,第二次上锁会出错
默认互斥锁:PTHREAD_MUTEX_DEFAULT(同标准互斥锁)

例子:

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[])
{
    	pthread_mutex_t  mutex;
    	if(argc < 2){
		printf("-usage:%s[error|mormal|recursival]\n",argv[0]);
		exit(0);
	}
	pthread_mmutexattr_t mutexattr;   //定义互斥锁属性
	pthread_mutexattr_init(&mutexattr);//初始化互斥锁属性
	if(!strcmp(argv[1],"error")){
		pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_ERRCHECK);	//设置互斥锁类型
	}else if(!strcmp(argv[1],"normal")){
		pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_NORMAL);
	}else if(!strcmp(argv[1],"recursive")){
		pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_RECURSIVE);
	}
	pthread_mutex_init(&mutex,&mutexattr);	//按照设置号的互斥锁类型创建初始化互斥锁
	if(pthread_mutex_lock(&mutex) != 0){	//上锁
		printf("lock failure\n");
	}else{
		printf("locak success\n");
	}
	if(pthread_mutex_lock(&mutex) != 0){	//上锁
		printf("lock failure\n");
	}else{
		printf("locak success\n");
	}
	pthread_mutex_unlock(&mutex);		//解锁
	pthread_mutex_unlock(&mutex);		//解锁
	pthread_mutexattr_destroy(&mutexattr);	//销毁互斥锁属性
	pthread_mutex_destroy(&mutex);		//销毁互斥锁
	return 0;

}
编译:gcc -lpthread ***.c -o test
运行:/.test normal
	lock success
	第一次上锁成功后,第二次上锁阻塞
	ctrl+c
	./test recursive
	lock success	
	lock success
	两次上锁都成功
	./test error
	lock success
	lock failure
	第一次上锁成功,第二次上锁会出错






















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值