2017-04-05 67 views
0

我环顾四周,但没有找到答案:在Linux用户空间程序中创建pthread互斥锁时,默认情况下这些互斥锁具有哪种策略?见https://linux.die.net/man/3/pthread_mutexattr_setprotocolLinux上pthread互斥体的默认优先级继承策略?

这似乎是最好的默认策略是优先级上限,即PTHREAD_PRIO_PROTECT,至少在我的应用程序;)

另外,可我对C++的std ::互斥设置优先级继承策略为好,我怀疑无论如何,C++ std :: mutex在Linux中将成为一个futex,就像pthread互斥体一样?

回答

0

按照POSIX standard

属性的默认值应为PTHREAD_PRIO_NONE。

不幸的是,据我所知,没有办法在std::mutex上设置它。有一个std::mutex::native_handle函数可用于访问底层的pthread_mutex_t *。然而,为时已晚来改变它的属性,因为pthread_mutex_initstd::mutex构造根据POSIX standard again执行,并且:

试图初始化未定义的行为已经初始化的互斥结果。

+0

感谢您接受快速简短的回答。我想我将不得不使用C++ std线程与裸POSIX互斥体然后,因为我不想PTHREAD_PRIO_NONE。无论如何,我可以通过一些RAII封装实现RAII解锁互斥。顺便说一句,如果Linux联机帮助页包含有关默认策略的信息,那将会很不错。 –