1

从手册页:

pthread_mutex_init()函数应使用 attr 指定的属性初始化由 mutex 引用的互斥锁。
如果 attr 为 NULL,则使用默认的 mutex 属性;效果应与传递默认互斥体属性对象的地址相同。成功初始化后,互斥锁的状态变为初始化并解锁。

什么是默认互斥属性?
这段代码设置了什么:pthread_mutex_t mutexLock = PTHREAD_MUTEX_INITIALIZER;

4

2 回答 2

2

您必须深入研究 POSIX 规范以获取互斥体属性的默认值:

  • pthread_mutexattr_settype()

    PTHREAD_MUTEX_DEFAULT

    尝试递归锁定这种类型的互斥锁会导致未定义的行为。尝试解锁未被调用线程锁定的这种类型的互斥锁会导致未定义的行为。尝试解锁未锁定的此类互斥锁会导致未定义的行为。允许实现将此互斥体映射到其他互斥体类型之一。

    请注意,这可能与其他互斥锁类型不同,但它可以映射到PTHREAD_MUTEX_NORMALor PTHREAD_MUTEX_ERRORCHECK

  • pthread_mutexattr_setpshared()

    该属性的默认值为PTHREAD_PROCESS_PRIVATE

对于其他属性,规范似乎没有明确说明。这些属性是:

于 2013-02-01T16:48:46.757 回答
0

检查此链接: http: //www.sourceware.org/pthreads-win32/manual/pthread_mutex_init.html

pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;

pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER;

pthread_mutex_t recmutex = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;

pthread_mutex_t errchkmutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
于 2013-02-01T08:33:04.367 回答