хорошо для определенности назовем одновременностью для простоты назовем барьером инструкцию wait(b,10) и "барьером вообще" кусок кода с несколькими wait- ами будем говорить что барьер преодален наскоком в случае когда "неопределенное" состояние флага имеет нужное значение
Код (Text): write(a,0) write(b,0) wait(b,0) wait(a,0) write(a,10) write(b,10) wait(b,10) wait(a,10) было исходным вариантом в #23, термосинтез подтвердит у него хроника постов есть и всё это дело бустер опрокинул - сказал что дедлок
Rockphorr Подпись у вас хорошая, извините, не удержался. Почитайте тред внимательно и подумайте, не просто же так все пишут что здесь дедлок и что это не решение. ^) Изначально b = 0 и первым пошёл первый поток, который дошёл до wait(b,10) и ждёт. Что будет когда пойдёт второй поток?
Rockphorr В дополнение к посту #43: Ой, какой ужас. Лучше прочтите предложение заглавного поста, начинающееся со слов: "Нужно организовать барьер..." Может всё-таки там Ваше определение одновременности, а не в пункте 3 дополнительных условий? Ку-уда... Разбежались. Барьер (он же — в некоторых источниках — рандеву) — общеизвестное общепринятое базовое понятие, примитив синхронизации. См. вышеупомянутое предложение первого поста. Ту Вы уже опоздали с раздачей определений. Поэтому я сразу сказал, что неверно используете, а не определениие просил.
l_inc хорошо пусть это будет пояснением к моей неправильной трактовке понятий, при желании с указнными пояснениями всегда можно переформулировать вот вот, я лишь говорю что решение l_inc отличается от этого нерешения только последней строкой, не меняющей сути дела
От Вас истины не добъёшься, я проверял построчно и термосинтез проверял. Раз Вам удобнее не замечать - финита ля комедия. ЗЫ: для всех желающих со свежим взглядом : смотрим пост l_inc # 29 на код после фразы сравниваем с тем, который привел я в #23 там в комментарии исходный вариант вместо wait(b,0) вместо wait(B,10)
Rockphorr TermoSINteZ лишь подтвердил, что в посте #42 то же, что ранее было в #23. И я с этим не спорю. И без подтверждения знаю. И в #37 я отвечал с учётом этого. А теперь: Пост #37. Первое замечание. До просветления.
l_inc Посветите меня темного, как перестановка концовок влияет на смысл истина: 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);< какой смысл сих строк ??? это же просто повтор строк на 2 выше мои жалкие изыскания: write(a,0) write(b,0) wait(b,0) wait(a,0) write(a,10) write(b,10) wait(b,10) wait(a,10)
Rockphorr Ну если Вы считаете, что не влияет, то действительно финита. Потому что это уже ни разу не комедия. Плакать хочется. Кстати, просвещать не буду. Но, когда поймёте, посчитайте, насколько постов выросла тема по Вашей глупости.
l_inc это просто незнание - неинтересовался я еще этим вопросом вплотную, могли бы сжалиться просветить я ведь все таки нашел различия - это как карточный фокус разгадать как похожи гады с учетом того что сказал бустер эта перестановка концовок для избежания дедлока в случае неудачного входного значения флага, соответственно последняя строка корректирует значение ибо в случае неудачи другой поток портит это значение l_inc,Вы жадный гений
Rockphorr Критический смысл. Но, как Вы, наконец, заметили, разница не только в них. Встречный вопрос: Код (Text): int a = 0; a++; a++; Какой смысл в третьей строке, если она всего-лишь является повторением предыдущей? Можно её убрать и ничего не изменится? Какой смысл в циклах, если они всего лишь повторяют одно и то же? Можно отказаться от циклов и оставлять только тело цикла, и ничего при этом не изменится?
А разве не достаточно так? X Y - write(a, 10) - write(b,10) wait(a, 10) - wait(b, 10) - Начальные значения не важны. Если они равны 10, то X просто не будет дожидаться Y, если не равны, то Y их установит. Потоки гарантированно завершаются с a и b равными 10.
В том варианте потоки тоже выходят не одновременно. Хотя раз исчерпала, значит исчерпала. Просто все условия выполнены. Потоки гарантированно покинут свои барьеры когда переменные примут заданное значение.