Цитата(ishergin @ May 25 2006, 12:29)

Кто нибудь знает какую часть времени времени занимает выполнение функции синхронизации?

Насколько я знаю объекты синхронизации ядра выполняются в NT ОЧЕНЬ долго.
Читал вопрос... Много думал... Ничего не понял

ИМХО, идеология обработки прерываний в NT такая:
1. Происходит прерывание, вызывается процедура, которая была вписана в вызов IoConnectInterrupt(). Процедура выполняется с указанным же при инициализации приоритетом IRQL - при этом обычно может быть вытеснена только другой процедурой прерывания с еще более высоким приоритетом.
2. В этой нашей процедуре делаем все что надо сделать очень быстро в RT, и потом запрашиваем DPC для дальнейшей неспешной обработки.
3. Наша затребованная процедура DPC отработает не немедленно, а ставится в очередь (у каждого процессора в системе своя отдельная очередь DPC)
4. Происходит реальный возврат из прерывания и вот только тогда приоритет упадет до DPC_LEVEL, начнет проверяться очередь DPC и исполняться наша процедура (в порядке очереди).
5. В обработчике DPC можно выставить событие или другой синхрообъект, чтобы поработал пользовательский поток.
6. Заканчивается обработка оставшихся элементов в очереди DPC.
7. Производится переключение контекста на процесс нужного потока (поток до прерывания спал, не факт, что был активен нужный процесс).
Так что, собственно объекты синхронизации тут тормозов немного добавляют, ИМО.
Если хотите улучшить временнЫе характеристики свой программы - спускайтесь в ядро, заводите рабочий поток и делайте нужную часть в нем (желательно на PASSIVE_LEVEL), для переключения при освобождении синхронизации можно использовать флажок boost (чтобы пнуть диспетчер, тогда требуемый поток будет первым в очереди на исполнение). Перенос в ядро позволит избежать задержек по пункту 7. Ну и объекты ядра намного быстрее чем производные от них объекты Win32.
Если хочется еще быстрее - можно перенести код в DPC или ISR процедуры - но если работы много и надолго, то Вы реально отравите жизнь всем остальным в системе, так что этот путь нежелателен.