Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>ЕМ>Assert (InCriticalSection == false && InCriticalSection == true);
ЕМ>
ЕМ>Вот Assert периодически и трапался, хотя при этом переменная не выходила за пределы значений true/false.
ЕМ>Все поняли, почему?
Разве Assert не будет трапаться всегда из-за оператора && внутри? Не поверил своим глазам — проверил на коде
#include "stdafx.h"
#include <assert.h>
int _tmain(int argc, _TCHAR* argv[])
{
bool b = true;
assert (b == false && b == true);
b = false;
assert (b == false && b == true);
return 0;
}
Забыл войти под именем когда отправлял. Наверное Assert должен был быть таким:
Assert (InCriticalSection == false || InCriticalSection == true);
Сразу видно пример был надуманный или с copy/paste что-то не так
#include "stdafx.h"
#include <assert.h>
int _tmain(int argc, _TCHAR* argv[])
{
bool b = true;
assert (b == false || b == true);
b = false;
assert (b == false || b == true);
return 0;
}
Здравствуйте, VDO, Вы писали:
VDO>Наверное Assert должен был быть таким:
VDO>VDO>Assert (InCriticalSection == false || InCriticalSection == true);
VDO>
Конечно, именно такой
Забавно — никто больше ошибки не заметил, включая меня самого
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Конечно, именно такой Забавно — никто больше ошибки не заметил, включая меня самого
Потратил пол дня на развитие идеи
http://www.dumpanalysis.org/blog/index.php/2007/04/14/race-conditions-on-a-uniprocessor-machine/