Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#1

Wie ist die Windows API Funktion EnterCriticalSection implementiert?

  Alt 11. Okt 2012, 11:05
Hallo,
Es geht mir darum folgendes zu wissen. (Im zugehörigen MSDN Artikel habe ich nichts gefunden.)

Wie ist die API Funktion EnterCriticalSection implementiert?
A) Aktives Warten: Abfragen einer LockVariable in einer While schleife bis diese anzeigt, dass die Section zugänglich ist. Alle Threads die Warten verbrauchen CPU Zeit.

B) Semaphore:
Ein mit 1 initialisierte Semaphore.
Die Semaphore wird durch EnterCriticalSection decremtiert, wird die Semaphore dadurch negativ wird der Thread blockiert und in eine Warteschleife abgelegt, ist die Semaphore >=0 führt der Thread den Codeabschnitt aus .
Die Semaphore wird durch LeaveCtricalSection incremtiert. Wird sie dadurch <=0 kommt der nächste Thread aus der Warteschlange dran und wird aus der Warteschlange entfernt und aufgeweckt um den Code auszuführen. (Das bedeutet das ein Wert von 1 dazu führt das nichts weiter getan wird. sprich dann ist alles getan , fürs Erste.)
Nur die Vorgänge um das Prüfen und ändern der Semaphore werden über "Aktives Warten" geblockt die blockierten Threads in der Warteschlange selbst verbrauchen dann keine CPU Zeit.

C) Irgendwie anders?
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (11. Okt 2012 um 12:09 Uhr)
  Mit Zitat antworten Zitat