函数pthread_mutex_init允许您指定指向属性的指针。但我还没有找到pthread属性的详细解释。我总是提供NULL。这个论点有用吗?
文档,对于那些忘记它的人:
PTHREAD_MUTEX_INIT(3)BSD Library 功能手册
调用pthread_mutex_init(3)NAME 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,则使用默认属性。
答案 0 :(得分:34)
查找该信息的最佳位置来自POSIX标准页面。
NULL
互斥锁属性为您提供了实现定义的默认属性。如果您想知道如何处理属性,请查看following reference并按照pthread_mutexattr_*
部分中的SEE ALSO
链接进行操作。通常,默认值是一组合理的属性,但它可能因平台而异,所以我更喜欢显式创建具有已知属性的互斥锁(更好的可移植性)。
这是针对标准的问题7,1003.1-2008。起点是here。点击左下角的Headers
,您可以导航到特定功能(包括pthreads.h
)。
属性允许您设置或获取:
而且,为了完整性,还有init and destroy calls,与特定属性没有直接关系,但用于创建它们。
答案 1 :(得分:4)
所有互斥锁属性都通过以下形式的函数在互斥锁属性对象中设置:
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
答案 2 :(得分:1)
如果向下滚动<pthread.h>
的功能列表,您会发现一堆pthread_mutexattr_...
个功能,包括init
,destroy
和设置各种属性的功能一个互斥体。当您传递NULL
时,会为所有这些属性创建具有合适默认值的互斥锁,但如果您需要修改特定属性,则可以构造pthread_mutexattr_t
结构并将其传入。
答案 3 :(得分:0)
对此参数应用NULL意味着使用默认参数。 因此,出于某些原因,您可能希望更改这些默认设置(使用pthread_mutexattr_init)。
文档说明了有关这些互斥锁设置的所有信息。