Re: Пример неочевидных граблей :)
От: Аноним  
Дата: 14.04.07 08:08
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>
ЕМ>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;
}
Re[2]: Пример неочевидных граблей :)
От: VDO Ирландия www.dumpanalysis.org
Дата: 14.04.07 08:24
Оценка: 1 (1) +1
Забыл войти под именем когда отправлял. Наверное 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;
}
Re[3]: Пример неочевидных граблей :)
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 14.04.07 09:49
Оценка: :)
Здравствуйте, VDO, Вы писали:

VDO>Наверное Assert должен был быть таким:


VDO>
VDO>Assert (InCriticalSection == false || InCriticalSection == true);
VDO>


Конечно, именно такой Забавно — никто больше ошибки не заметил, включая меня самого
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Пример неочевидных граблей :)
От: VDO Ирландия www.dumpanalysis.org
Дата: 14.04.07 21:49
Оценка: 15 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Конечно, именно такой Забавно — никто больше ошибки не заметил, включая меня самого


Потратил пол дня на развитие идеи

http://www.dumpanalysis.org/blog/index.php/2007/04/14/race-conditions-on-a-uniprocessor-machine/
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.