Синхронизация потоков на самом низком уровне
Помещайте методы синхронизации на самом низком уровне кода. Если в программе нужна критическая секция для защиты части данных, то необходимо помещать функции EnterCriticalSection И LeaveCriticalSection лишь вокруг данных фактического доступа. Это размещение гарантирует, что действительно защищается только тот элемент, который требуется защищать, и ничего более. Ограничение области видимости объектов синхронизации — лучшая защита от случайных блокировок. Одной из самых неприятных блокировок, с которыми я когда-либо встречался, был захват синхронизации объекта двумя указанными выше функциями.