一组线程的 C++ 互斥锁定

C++ Mutex locking for a set of threads

我理解互斥锁的基本原理是保护特定代码路径不被超过 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..
//
}

你要找的是 10 个互斥锁,一个用于 A1/B1,一个用于 A2/B2,等等。你可以将它们放在一个数组中,然后只访问正确的那个。

另外,需要说明的是,互斥量通常不会保护代码路径。他们保护的是数据。因此,如果您有一个列表,该列表可能有一个互斥锁,这样一次只有一个线程可以修改该列表(并且没有线程访问列表,而另一个线程正在修改它)。如果你有多个列表,你给每个列表它自己的互斥体,所以相同的代码路径将同时被多个线程使用,但这没关系,因为每个都在使用不同的列表。从你的描述来看,这就是你想要做的事情。