Sak*_*ham 3 c++ multithreading mutex
我是线程新手。如果我错了,请纠正我,互斥锁会锁定对共享数据结构的访问,以便在解锁之前不能被其他线程使用。因此,让我们考虑有 2 个或更多共享数据结构。那么,我应该为不同的数据结构创建不同的互斥对象吗?如果不是,那么如何std::mutex知道应该锁定哪个对象?如果我必须同时锁定 1 个以上的对象怎么办?
你的问题中有几点可以说得更精确。也许清除这个问题就能解决你的问题。
首先, amutex本身并不锁定对任何内容的访问。它基本上是您的代码可以锁定和解锁的东西,并且一些“魔法”确保一次只有一个线程可以锁定它。
如果按照约定,您决定访问某些数据结构的任何代码foo都首先从锁定互斥体开始foo_mutex,那么它将具有保护该数据结构的效果。
所以,话虽如此,关于你的问题:
这取决于两个数据结构是否需要一起访问(例如,更新一个数据结构而不更新另一个数据结构是否会使系统处于不一致状态)。如果是这样,您应该使用单个互斥体锁定它们。如果没有,您可以使用两个来提高并行性。
互斥体不锁定任何东西。按照惯例,您可以决定是否可以在持有数据结构时访问 1 个、2 个或一百万个数据结构。