Я тут подумал... Прерывание у нас может наступить МЕЖДУ ЛЮБЫМИ командами ASM кода? Если оно разрешено конечно, оно подождет несколько тактов пока будет выполняться длинная неделимая ASM команда и наступит сразу после, не будет рвать команду посередине, я прав? Получается, что если мы на С читаем в локальную переменную из глобальной, а это выполняется за много ASM команд, то у нас запросто может прийти прерывание которое пишет эту же глобальную переменную и в результате мы можем прочитать начало старого значения а конец нового? В этом заключается сложность и необходимость "исключительного доступа" к "общим" глобальным переменным? И как тогда читать? Через отдельную функцию, которая при старте запрещает нужные прерывания, читает переменную а потом возвращает прерывания? Или иметь флаг, который будет выставляться прерыванием при записи переменной и если в начале чтения и в конце он не совпадает - считать что процесс чтения завершен некорректно и данные невалидны? И надеяться, что этот флаг не постигнет та же участь - поскольку он будет читаться за ОДНУ ASM команду и никакое прерывание не приведет к неправильности его прочтения? Что скажете, господа? Я пока в замешательстве....

Я понимаю что эта коллизия может произойти раз в 1000 лет... А может и чаще - зависит от количества таких переменных и частоты обращения к ним. Просто очень не хочется писать код "более-менее условно работающий, но глючащий в отдельные моменты", а хочется устойчивый, методически правильный, чистый и шелковистый
