Тогда так. Код (Text): Code: X Y write(a,0) write(b,0) write(b,10) write(a,10) wait(a,10) wait(b,10) write(b,10) write(a,10)
Код (Text): write(a,0) write(b,0) wait(b,0) wait(a,10) ;<-- а так ??? вместо wait(a,0) write(a,10) write(b,10) wait(b,10) wait(a,10) ;<-- этой wait наверно можно вычеркнуть ?? так штоле ??? ваше ограничение заставляет "удвоить" ваше почти правильное решение зы: наверно это имелось ввbду
intel_x128 Тут ведь помимо указанных проблем, используется ещё один примитив -- read, -- пускай и неявно. Это допустимо?
Код (Text): write(a,0) wait(a,0) wait(b,0) write(b,0) ; ************** ; For any thread below this line a=0 and b=0 ?
Rockphorr Если начальное значение a == 0, то поток Y может песпрепятственно пробежать свой барьер первым. Рандеву может не состояться. r90 В общем-то, согласно условиям задачи нет. Но т.к. в этом варианте присутствуют более серьёзные недостатки, этот я проигнорировал. Хотя вполне можно было бы и смягчить условия, допуская read, необходимости в нём нету (см. ниже). PSR1257II Рандеву может не состояться, если изначально a == 0 || b == 0. Clickgg По условию нет ни третьего потока, ни разделяемой переменной t. Booster Круто. Похоже, это проходит. Причём, видимо, даже лучше моего. Моё содержит ещё одну (вторую) строчку: Код (Text): X Y write(a,0) write(b,0) wait(b,0) wait(a,0) write(b,10) write(a,10) wait(a,10) wait(b,10) write(b,10) write(a,10) Вторая строка, видимо, не нужна, что очень неплохо в контексте моей задачи (одним спинлоком меньше). Спасибо. Как-нибудь заменю Вашим вариантом.
PSR1257II Пусть b == 0 до того, как какой-либо поток попал в барьер. Тогда поток X может пройти первую и вторую строку (поток не остановится на wait(b,0), т.к. b уже равно нулю) ещё до того, как поток Y достигнет барьера. Вот, собственно, поэтому.
l_inc нет уж погодите ... погодите...... я предлагал вариант отличающийся только отсутствием ваших последних строк в каждом потоке - бустер сказал что это дедлок l_inc, ТАК ЧТО ВАШ ВАРИАНТ ТОЖЕ ДИСКВАЛИФИЦИРОВАН
l_inc одновременный выход если он уж так важен имхо реализуется двумя барьерами - если первый еще есть вероятность преодалеть наскоком то второй без шансов Код (Text): write(a,0) write(b,0) wait(b,0) wait(a,1) write(a,1) write(b,1) wait(b,1) write(b,10) write(a,10) wait(a,10) wait(b,10)
Rockphorr Теперь у вас дедлок возможен из-за второй ветви, а код вы потом по-моему меняли, а моя реплика относилась к первоначальной версии(про левую ветвь).
Rockphorr Не предлагали. Смотрите внимательнее на различия. Правильно сказал. Вы первый в этой теме использовали понятие одновременности (неясно, кстати, зачем). Раз уж используете, определение в студию, т.к. согласно моему интуитивному пониманию одновременность не реализуется никак. Неверно используете понятие барьера. Никаким "наскоком" он не "преодолевается".
В общем, была идея модифицировать вот это, чтобы значение а в конце было определено, но ничего не получается. Код (Text): x write(a, 10) wait(a, 0) write(a, 10) y write(a, 0) wait(a, 10) write(a, 0) Решение, которое предложил Booster, видимо, самое лучшее.
_DEN_ Правильно. Лучший способ придумать ответ в теме — это прочитать заголовок, а условие задачи можно и на хрустальном шаре нагадать, не читая.