函数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 回答
查找该信息的最佳位置来自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,与特定属性没有直接关系,但用于创建它们 .
所有互斥锁属性都通过以下形式的函数在互斥锁属性对象中设置:
所有互斥锁属性都通过以下形式的函数从互斥锁属性对象中检索:
其中name和Type的定义如下表所示:
如果向下滚动<pthread.h>的函数列表,您将找到一堆
pthread_mutexattr_...
函数,包括init
,destroy
和用于设置互斥锁的各种属性的函数 . 传递NULL
时,将为所有这些属性创建具有适当默认值的互斥锁,但如果需要修改特定属性,则可以构造pthread_mutexattr_t
结构并将其传入 .对此参数应用NULL意味着使用默认参数 . 因此,出于某些原因,您可能希望更改这些默认设置(使用pthread_mutexattr_init) .
该文档说明了有关这些互斥锁设置的所有信息 .