我正在处理一个程序,在其中一个线程比另一个线程处理更多的工作时,会导致饥饿问题。关键部分由一个可重入 QMutex 保护,但这个锁不公平。
在 Java 中,你可以为锁指定一个公平参数。C++(或 boost 库)有公平的可重入锁吗?最好是 C++11 及以上版本。
之前我做过一些研究,boost 中有 shared_lock,但我不需要读写锁,只需要一个锁来保证每个线程进入关键部分的机会相等。
非常感谢。
在 Java 中,你可以为锁指定一个公平参数。C++(或 boost 库)有公平的可重入锁吗?最好是 C++11 及以上版本。
之前我做过一些研究,boost 中有 shared_lock,但我不需要读写锁,只需要一个锁来保证每个线程进入关键部分的机会相等。
非常感谢。
std::mutex
和std::lock_guard<std::mutex>
,但它们不保证公平。我相信 MSVC CRT 实现使用等待队列,因此在该平台上可能是公平的。 - Cameron