我理解互斥锁的基本原理是保护特定的代码路径不被超过 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.. 同时访问该代码路径,那很好。只是从 AB 对中只有 1 个线程访问此代码。
我该如何实施?
X() {
//
Lock this code so that either of (A1, B1) can access it
and so on..
//
}