Re[9]: вопрос по синхронизации в многопоточной среде
От: tripol  
Дата: 15.07.10 07:43
Оценка:
Здравствуйте, _stun_, Вы писали:

__>Здравствуйте, tripol, Вы писали:


T>>Здравствуйте, tripol, Вы писали:


T>>И в случае с вопросом топик-стартера можно использовать приведенный класс,

T>>но только необходимо добавить volatile.

__>Отключение агрессивной оптимизации тут вряд ли поможет — нечего оптимизировать


Вполне может прооптимизировать такой код:


class A{
   long m_a;
public:
   long get_a()
   {
      return m_a;
   }
   void set_a( long val )
   {
      m_a = val;
   }
};

A a;

void Thread1()
{
    a.set_a(1);
}

int main()
{
    a.set_a(0);
    // start new thread to Thread1()
    while(!a.get_a()) // здесь может заинлайнить и без volatile цикл не выйдет
    {
    }
}


И вообще рекомендуется применять volatile для таких случаев всегда независимо от того,
заоптимизирует данный компилятор или нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.