Повтоpное занятие spin lock
- From
- Eugene Muzychenko (2:5000/14)
- To
- Yury Haron ()
- Date
- 2003-04-08T20:12:32Z
- Area
- SU.WINDOWS.NT.PROG
Привет!
08 Apr 03 11:30, you wrote to me:
YH> Способ (описанный в DDK) [атомаpно] yзнать что он "yже занятый",
YH> попpошy.
У меня определяется занятость не самого ядреного spin lock'а, а моей обертки для него :)
SpinLock *SL = (SpinLock *) (SectionData);
if (
KeGetCurrentIrql () < DISPATCH_LEVEL
|| KeGetCurrentProcessorNumber () != Owner
) {
KeAcquireSpinLock (&SL->Lock, &SL->OldIrql);
Assert (Depth == 0);
Owner = KeGetCurrentProcessorNumber ();
}
В DDK указано, что при IRQL >= DISPATCH_LEVEL процессор смениться не может. Соответственно, если IRQL ниже - нашим процессором spin lock не занят, и если в Owner номер не нашего процессора - аналогично.
Всего доброго!
Евгений Музыченко
--- GoldED+/W32 1.1.4.7
* Origin: Fox Tracks, Novosibirsk, Russia (2:5000/14)