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

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

  1. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    Код (Text):
    1. No, it wasn' correct
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Тогда так.
    Код (Text):
    1. Code:
    2.  
    3.     X              Y
    4. write(a,0)    write(b,0)
    5. write(b,10)    write(a,10)
    6. wait(a,10)    wait(b,10)
    7. write(b,10)    write(a,10)
     
  3. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Код (Text):
    1. write(a,0)    write(b,0)
    2. wait(b,0)      wait(a,10) ;<-- а так ??? вместо wait(a,0)
    3. write(a,10)    write(b,10)
    4. wait(b,10)      wait(a,10) ;<-- этой wait наверно можно вычеркнуть ??
    так штоле ??? ваше ограничение заставляет "удвоить" ваше почти правильное решение
    зы: наверно это имелось ввbду
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Rockphorr
    У Вас дедлок, если b равно нулю и первой выполняется первая ветвь.
     
  5. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    l_inc
    ну и где человек с барьером ????
     
  6. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    intel_x128
    Тут ведь помимо указанных проблем, используется ещё один примитив -- read, -- пускай и неявно. Это допустимо?
     
  7. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    Код (Text):
    1. write(a,0)  wait(a,0)
    2.  wait(b,0) write(b,0)
    3. ; **************
    4. ; For any thread below this line a=0 and b=0
    ?
     
  8. Clickgg

    Clickgg New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2011
    Сообщения:
    32
    t=0;
    X Y z
    wait(t,1) wait(b,10) write(t,1)//Start Thread
    write(a,10)
    write(b,10)
    write(t,0)
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Rockphorr
    Если начальное значение a == 0, то поток Y может песпрепятственно пробежать свой барьер первым. Рандеву может не состояться.
    r90
    В общем-то, согласно условиям задачи нет. Но т.к. в этом варианте присутствуют более серьёзные недостатки, этот я проигнорировал. Хотя вполне можно было бы и смягчить условия, допуская read, необходимости в нём нету (см. ниже).
    PSR1257II
    Рандеву может не состояться, если изначально a == 0 || b == 0.
    Clickgg
    По условию нет ни третьего потока, ни разделяемой переменной t.
    Booster
    Круто. Похоже, это проходит. Причём, видимо, даже лучше моего. Моё содержит ещё одну (вторую) строчку:
    Код (Text):
    1.      X              Y
    2. write(a,0)      write(b,0)
    3. wait(b,0)        wait(a,0)
    4. write(b,10)    write(a,10)
    5. wait(a,10)      wait(b,10)
    6. write(b,10)    write(a,10)
    Вторая строка, видимо, не нужна, что очень неплохо в контексте моей задачи (одним спинлоком меньше). Спасибо. Как-нибудь заменю Вашим вариантом. :)
     
  10. PSR1257II

    PSR1257II New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2011
    Сообщения:
    228
    l_inc

    Почему нет? :)
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    PSR1257II
    Пусть b == 0 до того, как какой-либо поток попал в барьер. Тогда поток X может пройти первую и вторую строку (поток не остановится на wait(b,0), т.к. b уже равно нулю) ещё до того, как поток Y достигнет барьера. Вот, собственно, поэтому.
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    l_inc
    И Вам тоже спасибо за интересную задачу.
     
  13. Rockphorr

    Rockphorr Well-Known Member

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

    погодите......


    я предлагал вариант отличающийся только отсутствием ваших последних строк в каждом потоке - бустер сказал что это дедлок

    l_inc, ТАК ЧТО ВАШ ВАРИАНТ ТОЖЕ ДИСКВАЛИФИЦИРОВАН
     
  14. Rockphorr

    Rockphorr Well-Known Member

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

    Код (Text):
    1. write(a,0)    write(b,0)
    2. wait(b,0)      wait(a,1)
    3. write(a,1)     write(b,1)
    4. wait(b,1)       write(b,10)
    5. write(a,10)    wait(a,10)    
    6. wait(b,10)
     
  15. branvi

    branvi New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2011
    Сообщения:
    40
    x
    write(a, 10)
    wait(a, 0)
    write(a, 10)

    y
    wait(a, 10)
    write(a, 0)
    wait(a, 10)

    upd неверно...
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Rockphorr
    Теперь у вас дедлок возможен из-за второй ветви, а код вы потом по-моему меняли, а моя реплика относилась к первоначальной версии(про левую ветвь).
     
  17. l_inc

    l_inc New Member

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

    branvi New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2011
    Сообщения:
    40
    В общем, была идея модифицировать вот это, чтобы значение а в конце было определено, но ничего не получается.
    Код (Text):
    1. x
    2. write(a, 10)
    3. wait(a, 0)
    4. write(a, 10)
    5.  
    6. y
    7. write(a, 0)
    8. wait(a, 10)
    9. write(a, 0)
    Решение, которое предложил Booster, видимо, самое лучшее.
     
  19. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    _DEN_
    Правильно. Лучший способ придумать ответ в теме — это прочитать заголовок, а условие задачи можно и на хрустальном шаре нагадать, не читая.