Синхронизация читателей/писателей в NT kernel-mode

From
Eugene Muzychenko (2:5000/14)
To
Gennady Mayko ()
Date
2003-01-27T01:37:23Z
Area
SU.WINDOWS.NT.PROG
Привет!

26 Jan 03 22:07, you wrote to me:

 GM> Я спрашивал о типе OS потому, что в новых OS иногда появляются новые
 GM> возможности (типа Queued Spin locks для XP и т.п.).
 GM> То есть имеется ввиду NT4, так?

Угу. Точнее - NT4/2k/XP, чтоб совместимо было.

 EM>> Строго говоря, они вызываются при опускании уровня ниже DISPATCH,
 EM>> но для непрерывности им перед вызовом уровень принудительно
 EM>> поднимается до DISPATCH. Я имел в виду проверять в DPC, не
 EM>> захватил ли кто-то список на PASSIVE, и если да, то откладывать
 EM>> отработку до возврата из того обработчика.

 GM> А как откладывать то? Если крутится в DPC, то есть шанс что код на
 GM> PASSIVE_LEVEL никогда не выполнится; если перезапустить DPC еще раз,
 GM> то она сразу же выполнится и это ничем не отличается от первого
 GM> случая.

Ну да - если бы DPC в каждый момент времени была только одна, то проблем было бы меньше. Хотя, если вытянуть все DPC в последовательность, а между PASSIVE синхронизироваться с ожиданием... Надо будет обдумать.

 GM> Если речь идет о real time на Windows NT, то, по моему, здесь можно
 GM> общеупотребительные правила и нарушить и даже вежливо попросить
 GM> пользователя не запускать другие программы и не шевелить мышкой :)

Не :) Пользователя как раз ограничивать нельзя - это ж в его интересах. А данные (звук) надо качать быстро и аккуратно.

 GM> В описываемом же случае, как мне кажется, лучше просто поднимать IRQL
 GM> до DISPATCH_LEVEL (когда это нужно) и иcпользовать общий spin lock.

Если более оптимального выхода не найду - так и буду делать :)

Всего доброго!
Евгений Музыченко

--- GoldED+/W32 1.1.4.7
 * Origin: Fox Tracks, Novosibirsk, Russia (2:5000/14)