Повто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)