公平可重入锁C ++

时间:2015-09-11 15:26:02

标签: c++ concurrency

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

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

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

非常感谢。

1 个答案:

答案 0 :(得分:2)

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

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