ランデブーの問題については、2 つのスレッドを同期する必要があります。これが古典的な解決策です。
aArrived = S(0);
bArrived = S(0);
スレッド A:
while(true) {
doSomething();
aArrived.signal();
bArrived.wait();
}
スレッド B:
while(true) {
doSomething();
bArrived.signal();
aArrived.wait();
}
これは 2 スレッドの場合はうまくいきますが、N スレッドの場合はどうでしょうか。N=3 の場合、次のように実装できます。
スレッド A (他のスレッドは対称):
while(true) {
doSomething();
aArrived.signal();
aArrived.signal();
bArrived.wait();
cArrived.wait();
}
私が見つけたすべての情報源は、次のように述べています。、または「以前に提示された解決策は、3 つ以上のスレッドでは機能しません。」.
(ちなみに、ここで提示された一般化されたソリューションは、N 個のスレッドに対して N 個のセマフォを使用するため、おそらく最適ではありません...このソリューションが N>2 スレッドで機能しないというシナリオを誰かが持っているかどうか知りたいです?)