приказал долго жить.
Итак простейший код (кстати поднимал тут похожий вопрос):
int x;
f1( )
{
x = 0;
RunThread_f2( );
x=1;
}
f2( )
{
int mith;
mith = x;
}
Вобщем всегда лепил в таком коде объекты синхронизации, дабы mith "не оказался непонятно чем". А вот вчера подумал и понял, что он может быть только либо 1 либо 0. Не может у нас быть переключение задач во время mov, ни как не может. А я не знаю ни одного компилятора который бы целое число перемещал побайтно. Значит это будет одна ассемблерная инструкция. А при ее исполнении даже прерывание от таймера не придет. (Все внешнии прерывания только между инструкциями).
Блин, сколько же кода можно было бы ускорить не обращаясь к семафорам и мьютексам...
[C++] Еще один велеколепный миф...25.02.02 21:26 Автор: z0 <z0> Статус: Member Отредактировано 25.02.02 21:52 Количество правок: 1
простой mov - да, согласен
с ним даже lock не используется (начиная с тройки)
но тем не менее ВНУТРИ rep-нутых команд происходят прерывания
а на многопроцессорных системах (использование например DMA уже дает много -блин- двухпроцессорную сиситему) есть туча команд которые могут быть приостановлены ВНУТРИ не прерыванием а другим процессором и получается INCONSISTENTY в памяти)
а еще на память прихдят старые процы которые по шине передавали слово ПОБАЙТНО в том числе и mov-ом
так что очень внимательно надо выкидывать синхронизаторы, двадцать раз проверять и смотреть код сгенерированный обязательно
лучше оставит этот синхронизатор гребучий если конечно не очень тормозит
[C++] Ты пытаешься Дж. Рихтера оспорить (глава "Синхронизация потоков") ... - так это ты зря...25.02.02 21:40 Автор: LiNX Статус: Незарегистрированный пользователь
Тут проблем много может быть (без синхронизации) ... не мудри лучше ...
Одна из самых серьезных - хранение переменных в регистрах ... - volatile может помочь, но не всегда ...
ЗЫ: Удели серьезное внимание изучению ассемблера и железа - твои формулировки недостаточно корректны ...
можно использовать ассемблерные вставки. но осторожно и аккуратно.28.02.02 06:17 Автор: йцукенг <jcukeng> Статус: Member