Синхронизация читателей/писателей в 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)