Fair Reentrant Lock C++

Vea*_*lav 5 c++ concurrency

当一个线程做的工作多于另一个线程时,我正在研究一个遭受饥饿的程序.关键部分受可重入QMutex保护,这是不公平的.

在Java中,您可以为锁定指定公平性参数.C++,(或boost库)是否有可用的公平重入锁定?最好是C++ 11.

之前我做了一些研究,在boost中有shared_lock,但我不需要读/写锁.只是一个锁,它将保证每个线程有相同的机会进入临界区.

非常感谢你.

Ser*_*eyA 2

C++ 线程原语实际上是基于 Posix 线程,而 Posix 没有任何公平的互斥体。不过你的问题说明你的设计有问题。这里有两个问题:

  1. 可重入互斥体是问题的征兆。您需要 100% 控制互斥体所有权和生命周期。如果您需要可重入互斥体,则意味着设计很草率。
  2. 您的描述中的线程饥饿是由于线程通信设计不当造成的。如果线程需要在工作期间保留互斥体,则意味着您正在有效地设计单线程系统,并且不需要任何线程。