对于集合点问题,我们需要同步两个线程,这是一个经典的解决方案:
aArrived = S(0);
bArrived = S(0);
线程 A:
while(true) {
doSomething();
aArrived.signal();
bArrived.wait();
}
线程 B:
while(true) {
doSomething();
bArrived.signal();
aArrived.wait();
}
这适用于两个线程,但是 N 个线程呢?对于 N=3,我们可以这样实现:
线程 A(其他线程是对称的):
while(true) {
doSomething();
aArrived.signal();
aArrived.signal();
bArrived.wait();
cArrived.wait();
}
我发现的所有来源都只是声明:“再次考虑第 3.2 节中的 Rendezvous 问题。我们提出的解决方案的一个限制是它不适用于两个以上的线程。” ,或“之前提出的解决方案不适用于两个以上的线程。” .
(顺便说一句,这里提出的通用解决方案可能不是最优的,因为它会为 N 个线程使用 N 个信号量......我只是好奇是否有人有这种解决方案不适用于 N>2 个线程的场景?)