• 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
  • 相关阅读:
    ASP.NET 判断GRIDVIEW的checkbox是否选中
    分享C#实现XML和实体序列化和反序列化的代码
    设计模式:简单工厂、工厂方法、抽象工厂之小结与区别 (转)
    如何验证已经加载的symbol file与module是否匹配?
    成功运行过的WinDBG Commands–12262010
    间歇性连接数据库失败, 先试试下面两篇文章
    如何使用符号文件?
    为<<Advanced Windows Debugging>>配置符号路径
    TCP中Connection和端口的关系
    SQL Profiler Trace中的列SPID
  • 原文地址:https://www.cnblogs.com/iuyy/p/13473628.html
Copyright © 2020-2023  润新知