2016-04-10 2 views
1

Ich bin sehr neu in der Linux-Kernel-Entwicklung und verwirrt im Verständnis der Funktion create_singlethread_workqueue(). Kann jemand bitte mit einem grundlegenden Beispiel zur Verfügung stellen, was genau tut create_singlethread_workqueue() und was ist der Job von INIT_WORK. Von den Erklärungen, die ich lese, sagt es, dass es eine Warteschlange für einen Prozessor herstellt und Arbeit initialisiert. Aber nicht in der Lage zu verstehen, was Arbeit, und nicht in der Lage zu verstehen, wie kann ich mit einem einfachen Beispiel verstehen.create_singlethread_workqueue in linux

Antwort

2

Die Funktion create_singlethrew_workqueue() erstellt eine Arbeitswarteschlange. Eine Arbeitswarteschlange ist nur eine Warteschlange, an die Sie Arbeit senden. "Arbeit" bedeutet hier jede Funktion, die Sie zu einem bestimmten Zeitpunkt ausführen möchten. Diese Arbeit wird von einem einzelnen Worker-Thread ausgeführt, der auch beim Aufruf von create_singlethrew_workqueue() erstellt wird.

Struktur workqueue_struct * create_singlethread_workqueue (const char * name);

Zweitens ist INIT_WORK ein Mechanismus zum Initialisieren der Arbeitsstruktur zur Laufzeit. Es gibt eine Möglichkeit, die Initialisierung auch zur Kompilierzeit durchzuführen.

INIT_WORK (Struktur work_struct * Arbeit, void (* Funktion) (void *), void * Daten);

Das heißt, wenn wir Work_struct * an eine Workqueue weiterarbeiten, wird die mit (* function) bezeichnete Funktion mit dem Argument void * data aufgerufen. Mal sehen, wie wir die Arbeit in die Warteschlange stellen:

int queue_work (struct workqueue_struct * warteschlange, struct work_struct * work);

Also hier haben wir die Arbeit in eine Workqueue * Warteschlange eingereiht/eingereicht. Dies wird letztendlich die Funktion ausführen, auf die (* function) mit dem Argument void * data zeigt, das in der INIT_WORK()

angegeben ist