Здравствуйте, MaximE, Вы писали:
ME>volatile не имеет никакого отношения к multithreading, поэтому его применение в этой ситуации не только бесполезно, но может быть и вредно, так как с volatile компилятор не сможет соптимизировтать доступ к этой переменной. Но если один из потоков изменяет переменную, синхронизация при помощи мютексов обязательна.
bool flag;
// thread 1
...
flag = false;
while(!flag) {
...
sleep(1);
}
...
//thread 2
...
flag = true;
...
VC6 в процессе оптимизации переносил переменную flag в первом потоке в регистр, в результате чего цикл оказывался вечным.
И был вобщем-то прав.
Можешь добавить мьютексов по вкусу — проблему это не решит.