• pthread_mutexattr_gettype、pthread_mutexattr_settype、pthread_mutexattr_destroy、pthread_mutexattr_init!


    pthread_mutexattr_gettype : get一个mutex属性类型!

    pthread_mutexattr_settype : set一个mutex属性类型!

    pthread_mutexattr_destroy :销毁一个   mutex    属性!

    pthread_mutexattr_init   :初始化一个 mutex 属性!

    #include <pthread.h>
    
    int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type);
    int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);

    pthread_mutexattr_gettype()和pthread_mutexattr_settype()函数分别获取和设置互斥锁类型属性。  type属性的默认值为PTHREAD_MUTEX_DEFAULT。

    有效的互斥锁类型包括:

    PTHREAD_MUTEX_NORMAL
    这种类型的互斥锁不会检测到死锁。试图重新锁定这个互斥锁而不先对其进行解锁的线程将死锁。尝试解锁另一个线程锁定的互斥锁会导致不确定的行为。尝试解锁未锁定的互斥锁会导致不确定的行为。
    PTHREAD_MUTEX_ERRORCHECK
    这种互斥锁提供错误检查。试图重新锁定这个互斥锁而不先对其进行解锁的线程将返回错误。尝试解锁另一个线程锁定的互斥锁的线程将返回错误。试图解锁未锁定的互斥锁的线程将返回错误。
    PTHREAD_MUTEX_RECURSIVE
    尝试重新锁定这个互斥锁而不先对其进行解锁的线程将成功锁定该互斥锁。这个互斥锁的多个锁需要相同数量的解锁才能释放互斥锁,然后另一个线程才能获取该互斥锁。尝试解锁另一个线程已锁定的互斥锁的线程将返回错误。一个线程试图解锁一个未锁定的互斥锁将返回错误。
    PTHREAD_MUTEX_DEFAULT
    尝试递归锁定这个类型的互斥锁会导致不确定的行为。尝试解锁一个未锁定的互斥锁会导致不确定的行为。

    返回值:

    成功,pthread_mutexattr_settype()函数将返回零。 否则,将返回错误号以指示错误。
    完成,pthread_mutexattr_gettype()函数将返回零,并将attr的type属性值存储到type参数引用的对象中。  否则,将返回错误号以指示错误。

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

    pthread_mutexattr_init()函数使用默认值初始化attr指向的互斥属性对象。初始化已经初始化的互斥锁属性对象将导致不确定的行为。

    pthread_mutexattr_destroy()函数销毁一个互斥体属性对象(使其未初始化)。

    互斥对象属性对象被销毁后,可以使用pthread_mutexattr_init()重新对其进行初始化。

    销毁未初始化的互斥属性对象将导致不确定的行为。

    返回值:

    成功时,函数返回0。错误时,返回正值的错误号。

    #include <stdio.h>
    #include <pthread.h>
    int main(){
        pthread_mutexattr_t attr = {0};
        int value0 = pthread_mutexattr_init(&attr);
        int value1 = pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
        int kind   = 0;
        int value2 = pthread_mutexattr_gettype(&attr,&kind);
        int value3 =  pthread_mutexattr_destroy(&attr);
        printf("value0:%d
    ",value0);
        printf("value1:%d
    ",value1);
        printf("value2:%d
    ",value2);
        printf("value3:%d
    ",value3);
        printf("kind  :%d
    ",  kind);
    
        return 0;
    }
    编译:gcc demo.c -lpthread
  • 相关阅读:
    出现错误:代理服务器拒绝连接的解决方法
    ansible之模块 条件判断
    软件相关模块与ansible剧本
    ansible的应用
    Celery -----异步任务,定时任务,周期任务
    SQLAlchemy增删改查 一对多 多对多
    python是如何进行内存管理的?
    Django的模板层(1)
    1.Git安装
    6.case
  • 原文地址:https://www.cnblogs.com/iuyy/p/13473628.html
Copyright © 2020-2023  润新知