Der Unterschied zwischen wait_queue_head und wait_queue im Linux-Kernel

8

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?

    
jaeyong 13.11.2013, 00:14
quelle

2 Antworten

9

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 ist    wait_queue_t .

     

Normalerweise werden die <linux/list.h> -Strukturen auf dem Stack mit zugeordnet   Funktionen wie wait_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     
MikroDel 19.11.2013 07:44
quelle
4

Warteliste ist einfach eine Liste von Prozessen und einer Sperre.

wait_queue_head_t repräsentiert die Warteschlange als Ganzes. Es ist der Kopf der Warteschlange.

wait_queue_t repräsentiert das Element der Liste - ein einzelner Prozess, der in der Warteschlange wartet.

    
TMS 23.11.2013 18:33
quelle

Tags und Links