首页 文章

pthread互斥体的“属性”是什么?

提问于
浏览
23

函数pthread_mutex_init允许您指定指向属性的指针 . 但我还没有找到pthread属性的详细解释 . 我总是提供NULL . 这个论点有用吗?

文档,对于那些忘记它的人:

PTHREAD_MUTEX_INIT(3)BSD库函数手册PTHREAD_MUTEX_INIT(3)名称pthread_mutex_init - 创建互斥锁概要#include <pthread.h>

INT
pthread_mutex_init(pthread_mutex_t * restrict mutex,
const pthread_mutexattr_t * restrict attr);
说明pthread_mutex_init()函数创建一个新的互斥锁,其属性由attr指定 . 如果attr为NULL,则使用默认属性 .

4 回答

  • 34

    查找该信息的最佳位置来自POSIX标准页面 .

    NULL mutex属性为您提供了实现定义的默认属性 . 如果您想知道如何处理属性,请查看following reference并按照 SEE ALSO 部分中的 pthread_mutexattr_* 链接进行操作 . 通常,默认值是一组合理的属性,但它可能因平台而异,因此我更愿意显式创建具有已知属性的互斥锁(更好的可移植性) .

    这是针对标准的问题7,即1003.1-2008 . 起点是here . 单击左下角的 Headers 将允许您导航到特定功能(包括 pthreads.h ) .

    这些属性允许您设置或获取:

    • type(死锁,死锁检测,递归等) .

    • robustness(当您获得互斥锁并且拥有它时原始所有者死亡时会发生什么) .

    • process-shared attribute(用于跨进程边界共享互斥锁) .

    • protocol(当优先级较高的线程需要互斥锁时,线程的优先级如何表现) .

    • priority ceiling(临界区运行的优先级,防止优先级倒置的方法) .

    并且,为了完整性,还有init and destroy calls,与特定属性没有直接关系,但用于创建它们 .

  • 0

    所有互斥锁属性都通过以下形式的函数在互斥锁属性对象中设置:

    int pthread_mutexattr_setname(pthread_attr_t *attr, Type t);
    

    所有互斥锁属性都通过以下形式的函数从互斥锁属性对象中检索:

    int pthread_mutexattr_getname(const pthread_attr_t *attr, Type *t);
    

    其中name和Type的定义如下表所示:

    Type and Name   Description and Value(s)
    int protocol    Define the scheduling classes for mutex locks 
                    PTHREAD_PRIO_NONE,PTHREAD_PRIO_PROTECT,
                    PTHREAD_PRIO_INHERIT
    
    int pshared Defines whether a mutex is shared with other processes. 
                    PTHREAD_PROCESS_SHARED, PTHREAD_PROCESS_PRIVATE
    
    int prioceiling Used for mutex attribute priority ceiling values. 
                    See POSIX.1 section 13
    
    int type    Application defined mutex locking
                    PTHREAD_MUTEX_NORMAL,PTHREAD_MUTEX_RECURSIVE,
                    PTHREAD_MUTEX_ERRORCHECK,PTHREAD_MUTEX_DEFAULT
    
  • 1

    如果向下滚动<pthread.h>的函数列表,您将找到一堆 pthread_mutexattr_... 函数,包括 initdestroy 和用于设置互斥锁的各种属性的函数 . 传递 NULL 时,将为所有这些属性创建具有适当默认值的互斥锁,但如果需要修改特定属性,则可以构造 pthread_mutexattr_t 结构并将其传入 .

  • 4

    对此参数应用NULL意味着使用默认参数 . 因此,出于某些原因,您可能希望更改这些默认设置(使用pthread_mutexattr_init) .

    该文档说明了有关这些互斥锁设置的所有信息 .

相关问题