非对称互斥体的概念

Concept of a asymmetric mutex

有 1 个线程 "MThread" 和 20 个线程 "HThread_01"..."HThread_20"。我正在寻找类似于具有以下属性的互斥锁 m 的东西:

如果从 "MThread" 调用 m.lock() 则 20 "HThreads" 将被阻止。

如果从 20 个 "HThreads" 之一调用 m.lock(),只有 "MThread" 会被阻塞,而另一个 "HThreads" 不会。

C++ 中是否有允许这样做的轻量级概念(不是 boost)?非常感谢你。

看起来 std::shared_mutex 适合您的用例。 shared_mutex 提供独占和共享锁定。

std::shared_mutex mut;

在 MThread 中,您将使用 mut.lock() 获得独占访问权限

在 MThread_01 ... MThread_20 中,您将使用 mut.lock_shared() 获得共享访问权限。