默认的互斥锁属性是什么?

时间:2013-02-01 08:06:13

标签: c pthreads mutex

从手册页:

  

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

默认互斥锁属性是什么?
使用此代码设置的内容:pthread_mutex_t mutexLock = PTHREAD_MUTEX_INITIALIZER;

2 个答案:

答案 0 :(得分:2)

您必须深入了解POSIX规范以获取互斥锁属性的默认值:

  • pthread_mutexattr_settype()

      

    PTHREAD_MUTEX_DEFAULT

         

    尝试以递归方式锁定此类型的互斥锁会导致   未定义的行为。试图解锁这种类型的互斥锁   未被调用线程锁定导致未定义的行为。   尝试解锁未锁定的此类型的互斥锁会导致结果   在未定义的行为。允许实现映射此互斥锁   其中一种互斥体类型。

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

  • pthread_mutexattr_setpshared()

      

    属性的默认值为PTHREAD_PROCESS_PRIVATE

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

答案 1 :(得分: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;