Для сближения проблем, которые мы должны синхронизировать две темы, а вот классическое решение:Почему рандеву с решением семафора не обобщают (и вместо этого мы используем барьер)?
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, мы можем реализовать что-то вроде этого:
Thread A (другие потоки симметричны):
while(true) {
doSomething();
aArrived.signal();
aArrived.signal();
bArrived.wait();
cArrived.wait();
}
Все источники, которые я нашел только констатировать, что: "Consider again the Rendezvous problem from Section 3.2. A limitation of the solution we presented is that it does not work with more than two threads." или "Solution presented previously doesn't work for more than two threads.".
(Кстати, обобщенное решение, представленное здесь, вероятно, не оптимально, поскольку оно будет использовать N семафоров для N потоков ... Мне просто интересно, есть ли у кого сценарий, что это решение не работает для N> 2 threads?)
Какой язык? Или вы спрашиваете в общем смысле? Причина, по которой я спрашиваю об этом, заключается в том, что в Java есть простой способ сделать это. –
Привет, на самом деле не имеет значения, на каком языке. Есть, вероятно, более простой способ сделать это, но я просто пытаюсь понять, почему обобщение не работает ... Любая идея? :) –