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

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

我之前做过一些研究,boost中有shared_lock,但是我不需要读/写锁。只是一个锁,它将确保每个线程都有相等的机会进入临界区。

非常感谢你。

最佳答案

C++线程原语实际上基于Posix线程,并且Posix没有任何公平的互斥体。但是,您的问题表明您的设计存在问题。这里有两个问题:

  • 重入互斥体是问题的征兆。您需要100%地控制互斥体所有权和生命周期。如果需要可重入的互斥体,则意味着设计很草率。
  • 您的描述中的线程不足是线程通信设计不当的结果。如果线程在工作期间需要保持互斥锁,则意味着您正在有效地设计单线程系统,并且不需要任何线程。
  • 10-05 22:44