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

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

  1. Ezrah

    Ezrah Member

    Публикаций:
    0
    Регистрация:
    22 мар 2011
    Сообщения:
    411
    Ation
    Но задача была в том, чтобы они это сделали одновременно, а не сделали в принципе.
     
  2. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    В условии "одновременно" не фигурировала ни в какой форме. И это невозможно в принципе (если не брать в учет многоядерность). Все равно это спор ниочем. Сферического коня в вакууме мерять тяжело и безсмысленно.
     
  3. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Ation
    В условии фигурировал термин барьер. Надо ли проводить ликбез и объяснять что это такое, или достаточно будет послать в гугл?
    Кстати, если бы вы читали топик, то вы бы заметили, что в нём обсуждалось легитимность использования слова "одновременно". И более того, даже придумали в каком смысле это слово можно употреблять, а в каком смысле -- не стоит.

    Но помимо этого, ваш код неверен ещё и по другой причине. Если поток Y пройдя ваш "барьер" задумает изменить значения a и b (в условии об этом ничего не говорилось, поэтому предполагаем худшее, что именно этими изменениями Y и займётся в первую очередь), и поток X подойдёт к барьеру после этих изменений, то у X будут шансы остаться у этого барьера навсегда.
     
  4. l_inc

    l_inc New Member

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

    Например, если в #22 поток Y первым выйдет из wait(b,10) (при этом X мог ещё даже не войти в свой wait), выполнит write(a,10), а потом тут же перезапишет a другим значением, поток X может так и не пройти свой wait.

    Кроме того, в такой постановке один из потоков также теоретически может оперировать значениями a и b ещё до входа в свой барьер таким образом, что другой поток пройдёт свой барьер не останавливаясь.

    Поэтому, хотя в условии и сказано, что "начальные значения переменных a и b неизвестны и могут быть любыми", неявно принято, что за пределами барьеров они не меняются (по крайней мере нигде не сказано, что допустимо обратное). В противном случая задача действительно в общем случае нерешаема.
     
  5. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    А такое решение не подойдёт?
    A:
    Код (Text):
    1. write(a, 13)
    2. wait(b,13)
    3. write(a, 0)
    4. wait(b, 0)
    5. <your code here>
    6. write (a, 666)
    7. wait(b, 10)
    B:
    Код (Text):
    1. write(b, 13)
    2. wait(a,13)
    3. write(b, 0)
    4. wait(a,0)
    5. <your code here>
    6. wait (a, 666)
    7. write(a, 10)
    8. write(b, 10)