【发布时间】:2016-06-16 13:32:04
【问题描述】:
一位同事最近遇到了一个问题,归结为我们认为具有两个线程的 C++ 应用程序中的以下事件序列:
-
线程 A 持有一个互斥体。
-
当线程 A 持有互斥体时,线程 B 尝试锁定它。由于它被持有,线程 B 被挂起。
-
线程 A 完成了它持有互斥锁的工作,从而释放了互斥锁。
-
此后不久,线程 A 需要访问受互斥锁保护的资源,因此它再次锁定它。
-
似乎线程 A 再次获得了互斥锁;线程 B 仍在等待,尽管它首先“请求”了锁。
这一系列事件是否符合 C++11 的 std::mutex 和/或 pthread 的语义?老实说,我以前从未考虑过互斥锁的这一方面。
是否有任何公平保证来防止其他线程饿太久,或者有什么方法可以得到这样的保证?
【问题讨论】:
标签: c++ multithreading pthreads mutex contention