Ich kann viele Beispiele bezüglich wait_queue_head
finden.
Es funktioniert als ein Signal, erstellen Sie eine wait_queue_head
, jemand
kann schlafen, bis jemand anderes es hochzieht.
Aber ich kann kein gutes Beispiel dafür finden, wait_queue
selbst zu verwenden, vermutlich sehr verwandt damit.
Könnte jemand ein Beispiel geben, oder unter der Haube von ihnen?
Von Linux-Gerätetreibern :
Der Typ
wait_queue_head_t
ist eine ziemlich einfache Struktur, definiert in %Code%. Es enthält nur eine Sperrvariable und eine verknüpfte Liste von schlafenden Prozessen. Die einzelnen Datenelemente in der Liste sind Geben Sie<linux/wait.h>
ein, und die Liste ist die generische Liste, die in definiert istwait_queue_t
.Normalerweise werden die
<linux/list.h>
-Strukturen auf dem Stack mit zugeordnet Funktionen wiewait_queue_t
; die Strukturen enden in der Stapel, weil sie einfach als automatische Variablen deklariert sind relevante Funktionen. Im Allgemeinen muss sich der Programmierer nicht damit befassen sie.
Sehen Sie sich Einen genaueren Blick auf Warteschlangen an.
Einige fortgeschrittene Anwendungen erfordern jedoch möglicherweise den Umgang mit wait_queue_t Variablen direkt. Für diese ist es einen kurzen Blick wert was tatsächlich in einer Funktion wie interruptible_sleep_on vor sich geht. Das Folgende ist eine vereinfachte Version der Implementierung von interruptible_sleep_on, um einen Prozess in den Ruhezustand zu versetzen:
%Vor%Der Code erzeugt hier eine neue wait_queue_t Variable (wait, die bekommt auf dem Stack zugewiesen) und initialisiert es. Der Status der Aufgabe ist wird auf TASK_INTERRUPTIBLE gesetzt, was bedeutet, dass es sich um einen Interrupt handelt Schlaf. Der Warteschlangeneintrag wird dann zur Warteschlange hinzugefügt (der wait_queue_head_t * Argument). Dann wird ein Zeitplan aufgerufen, der übergibt den Prozessor an jemand anderen. Zeitplan nur zurück wenn jemand anders den Prozess geweckt und seinen Zustand eingestellt hat TASK_RUNNING. Zu diesem Zeitpunkt wird der Wartelisteneintrag aus der Warteschlange entfernt Warteschlange, und der Schlaf ist fertig
Die Interna der Datenstrukturen, die an Warteschlangen beteiligt sind:
Aktualisierung: Für die Benutzer, die glauben, dass das Bild mein eigenes ist - hier ist noch einmal der Link zu den Linux-Gerätetreibern wo das Bild von
genommen wird