Рандеву. Задачка на синхронизацию.

Тема в разделе "WASM.HEAP", создана пользователем l_inc, 7 авг 2011.

  1. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    хорошо для определенности
    назовем
    одновременностью


    для простоты назовем барьером инструкцию wait(b,10) и "барьером вообще" кусок кода с несколькими wait- ами

    будем говорить что барьер преодален наскоком в случае когда "неопределенное" состояние флага имеет нужное значение
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    Код (Text):
    1. write(a,0)    write(b,0)
    2. wait(b,0)      wait(a,0)
    3. write(a,10)    write(b,10)
    4. wait(b,10)      wait(a,10)
    было исходным вариантом в #23, термосинтез подтвердит у него хроника постов есть

    и всё это дело бустер опрокинул - сказал что дедлок
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Rockphorr
    Подпись у вас хорошая, извините, не удержался. Почитайте тред внимательно и подумайте, не просто же так все пишут что здесь дедлок и что это не решение. ^) Изначально b = 0 и первым пошёл первый поток, который дошёл до wait(b,10) и ждёт. Что будет когда пойдёт второй поток?
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rockphorr
    В дополнение к посту #43:
    Ой, какой ужас. Лучше прочтите предложение заглавного поста, начинающееся со слов: "Нужно организовать барьер..." Может всё-таки там Ваше определение одновременности, а не в пункте 3 дополнительных условий?
    Ку-уда... Разбежались. Барьер (он же — в некоторых источниках — рандеву) — общеизвестное общепринятое базовое понятие, примитив синхронизации. См. вышеупомянутое предложение первого поста. Ту Вы уже опоздали с раздачей определений. Поэтому я сразу сказал, что неверно используете, а не определениие просил.
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.548
    Адрес:
    Russia
    Rockphorr
    Подтверждаю. Было. Но лучше обратите внимение на последний пост l_inc. Внимательно.
     
  6. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    l_inc хорошо пусть это будет пояснением к моей неправильной трактовке понятий, при желании с указнными пояснениями всегда можно переформулировать

    вот вот, я лишь говорю что решение l_inc отличается от этого нерешения только последней строкой, не меняющей сути дела
     
  7. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    мне лишь нужно подтверждение того что код в цитате не решение и все
     
  8. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rockphorr
    Пост #37. Первое замечание.
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    l_inc

    даже термосинтез подтвердил что было, замечание отклонено.
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rockphorr
    Пост #37. Первое замечание. До просветления.
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    От Вас истины не добъёшься, я проверял построчно и термосинтез проверял. Раз Вам удобнее не замечать - финита ля комедия.


    ЗЫ: для всех желающих со свежим взглядом :
    смотрим пост l_inc # 29 на код после фразы
    сравниваем с тем, который привел я в #23 там в комментарии исходный вариант вместо wait(b,0) вместо wait(B,10)
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rockphorr
    TermoSINteZ лишь подтвердил, что в посте #42 то же, что ранее было в #23. И я с этим не спорю. И без подтверждения знаю. И в #37 я отвечал с учётом этого.
    А теперь:
    Пост #37. Первое замечание. До просветления.
     
  13. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    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)
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rockphorr
    Ну если Вы считаете, что не влияет, то действительно финита. Потому что это уже ни разу не комедия. Плакать хочется.

    Кстати, просвещать не буду. Но, когда поймёте, посчитайте, насколько постов выросла тема по Вашей глупости.
     
  15. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    l_inc
    это просто незнание - неинтересовался я еще этим вопросом вплотную, могли бы сжалиться просветить я ведь все таки нашел различия - это как карточный фокус разгадать как похожи гады :)

    с учетом того что сказал бустер эта перестановка концовок для избежания дедлока в случае неудачного входного значения флага, соответственно последняя строка корректирует значение ибо в случае неудачи другой поток портит это значение

    l_inc,Вы жадный гений
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rockphorr
    Критический смысл. Но, как Вы, наконец, заметили, разница не только в них.
    Встречный вопрос:
    Код (Text):
    1. int a = 0;
    2. a++;
    3. a++;
    Какой смысл в третьей строке, если она всего-лишь является повторением предыдущей? Можно её убрать и ничего не изменится?
    Какой смысл в циклах, если они всего лишь повторяют одно и то же? Можно отказаться от циклов и оставлять только тело цикла, и ничего при этом не изменится?
     
  17. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.615
    Адрес:
    Russia
    l_inc
    спасибо, истина стоит тех лишних постов на которые раздулась тема
     
  18. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    А разве не достаточно так?
    X Y
    - write(a, 10)
    - write(b,10)
    wait(a, 10) -
    wait(b, 10) -

    Начальные значения не важны. Если они равны 10, то X просто не будет дожидаться Y, если не равны, то Y их установит. Потоки гарантированно завершаются с a и b равными 10.
     
  19. branvi

    branvi New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2011
    Сообщения:
    40
    Ation, синхронизации нет.
    Вообще, тема исчерпала себя после поста #22 с оптимальным решением.
     
  20. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    В том варианте потоки тоже выходят не одновременно. Хотя раз исчерпала, значит исчерпала.
    Просто все условия выполнены. Потоки гарантированно покинут свои барьеры когда переменные примут заданное значение.