Linux 上 pthread 互斥体的默认优先级继承策略?

Eri*_*pää 2 c++ linux pthreads linux-kernel

我已经环顾四周,但没有找到答案:When create pthread mutexes in a Linux userspace program,which policy do those mutexs have by default? 请参阅https://linux.die.net/man/3/pthread_mutexattr_setprotocol

看来最好的默认策略是优先级上限,即 PTHREAD_PRIO_PROTECT,至少对于我的应用程序来说是这样;)

另外,我也可以在 C++ std::mutexes 上设置优先级继承策略吗?我怀疑 C++ std::mutex 无论如何都会是 Linux 中的 futex,就像 pthread 互斥锁一样?

hak*_*kos 5

根据POSIX 标准

该属性的默认值应为 PTHREAD_PRIO_NONE。

std::mutex不幸的是,据我所知,没有办法对此进行设置。有一个std::mutex::native_handle函数可用于访问底层pthread_mutex_t *. 然而,更改它的任何属性已经为时已晚,因为它pthread_mutex_init是由构造函数执行的,并且再次std::mutex根据POSIX 标准:

尝试初始化已初始化的互斥体会导致未定义的行为。