一组线程的 C++ 互斥锁
Posted
技术标签:
【中文标题】一组线程的 C++ 互斥锁【英文标题】:C++ Mutex locking for a set of threads 【发布时间】:2020-05-08 19:00:17 【问题描述】:我理解互斥锁的基本原理是保护特定的代码路径不被超过1个线程访问。
在我当前的设置中,我有 10 个 A 类 (A1-A10) 线程和 10 个 B(B1-B10) 类线程。我的意思是,运行无限循环并分别调用方法 A() 和 B() 的线程。从这些方法 A 和 B 中,它们都在调用函数 X()。
我想要做的是,锁定函数 X() 中的代码的某个部分,以便在任何时候从一对 A 和 B (A1:B1, A2:B2...) 中只有 1正在访问该路径。这意味着 A1 位于该代码路径或 B1 中,同样,A2 位于 B2 的代码路径中,依此类推。如果 A1、A2、B3、B4、A5.. 同时访问该代码路径,那很好。只是 A-B 对中只有 1 个线程访问此代码。
我该如何实现?
X()
//
Lock this code so that either of (A1, B1) can access it
and so on..
//
【问题讨论】:
【参考方案1】:您要查找的是 10 个互斥体,一个用于 A1/B1,一个用于 A2/B2,等等。您可以将它们放在一个数组中,然后访问正确的那个。
另外,需要明确的是,互斥锁通常不会保护代码路径。他们保护的是数据。因此,如果您有一个列表,该列表可能有一个互斥锁,因此一次只有一个线程可以修改列表(并且没有线程访问列表,而另一个线程正在修改它)。如果您有多个列表,则为每个列表提供自己的互斥锁,因此多个线程将同时使用相同的代码路径,但这没关系,因为每个列表都使用不同的列表。从您的描述中可以看出,您正在尝试做类似的事情。
【讨论】:
以上是关于一组线程的 C++ 互斥锁的主要内容,如果未能解决你的问题,请参考以下文章