互斥锁的类型( 标准互斥锁(默认互斥锁)、递归互斥锁、 检错互斥锁)

互斥锁属性创建和销毁

#include<pthread.h>

int pthread_mutexattr_init(pthread_mutexattr_t  *attr);

int pthread_mutex_attr_destroy(pthread_mutexattr_t  *attr);

返回值:成功返回0,出错返回错误编号

参数:互斥锁属性

互斥锁共享属性操作

#include<pthread.h>

int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr,int *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 *attr, int *kind);

int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int kind);

返回值:成功返回0,出错返回错误编号

参数:

        attr:互斥锁属性:

        kind:互斥锁类型

                标准互斥锁:PTHREAD_MUTEX_NORMAL 

                                      (第一次上锁成功,第二次上锁会阻塞)

                递归互斥锁:PTHREAD_MUTEX_RECURSIVE

                                       (第一次上锁成功,第二次以后上锁还是成功,内部计数)        

                检错互斥锁:PTHREAD_MUTEX_ERRORCHECK

                                       (第一次上锁成功,第二次上锁会出错)

                默认互斥锁:PTHREAD_MUTEX_DEFAULT

                                        (跟标准互斥锁一样)          

示例检测

#include<pthread.h>
#include<iostream>
#include<string.h>
using namespace std;
int main(int argc,char* agr[])
{

    pthread_mutex_t mutex;  //定义互斥锁对象

    //定义(创建)互斥锁属性
    pthread_mutexattr_t mutexattr;

    //初始化互斥锁属性
    pthread_mutexattr_init(&mutexattr);

    if(!strcmp(agr[1],"error"))
    {
        //设置互斥锁类型
        pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_ERRORCHECK);//检错互斥锁

    }
    else if(!strcmp(agr[1],"normal"))
    {
        pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_NORMAL);//标准互斥锁

    }
    else if(!strcmp(agr[1],"recursive"))
    {
        pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_RECURSIVE);//递归互斥锁

    }

    pthread_mutex_init(&mutex,&mutexattr);   //初始化,不是直接NULL了

    if(pthread_mutex_lock(&mutex)!=0)
    {
        cout<<"上锁失败"<<endl;
    }        
    else {
        cout<<"上锁成功"<<endl;
    }

    if(pthread_mutex_lock(&mutex)!=0)
    {
        cout<<"上锁失败"<<endl;
    }
    else {
        cout<<"上锁成功"<<endl;
    }

    pthread_mutex_unlock(&mutex); //上两次锁,解两次锁
    pthread_mutex_unlock(&mutex);
 
    pthread_mutexattr_destroy(&mutexattr);   //销毁互斥锁属性
    pthread_mutex_destroy(&mutex);   //销毁互斥锁
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值