Примитивная синхронизация потоков

Тема в разделе "LANGS.C", создана пользователем KingT, 23 фев 2009.

  1. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    208
    Есть два потока A,B и глобальная переменная bool IsReady = false. Поток A крутится и в какой-то момент должен установить переменную IsReady в true.Поток B должен это отловить. Я сделал в потоке B так:

    while(!IsReady)
    {
    }
    ...

    Что интересно в Debug все работает,поток В крутится в цикле, когда поток A ставит переменную в true и идет дальше.Если сделать Release то поток B висит в цикле while и дальше не идет при этом поток A не подвисает и выставляет IsReady в true.Самое непонятное в том,что если в цикле while дать Sleep(1) то все работает и в Release.
    Компилятор MSVS 6.0.
     
  2. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    bool volatile IsReady = false
     
  3. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    крутить цикл - не лучшее решение