Per default il la funzione di lavoro viene chiamata con il lavoro come parametro. All'interno del thread è possibile ottenere facilmente l'elemento dati della struttura. Anche un Gnurou, per ottenere l'accesso di più dati, la struttura di lavoro può essere inserita all'interno di una specifica struttura di implementazione e utilizzando il contenitore di macro all'interno del thread è possibile accedere a tutti i dati.
Una descrizione semplice circa WorkQueue
worqueue sono interrupt movimentazione metà inferiore mechanishm, dove una parte del lavoro è dato a un thread kernel per eseguire successivamente con preemtion su un interrupt consentono. Un thread percpu eventi/n viene creato dal kernel, i thread possono anche essere creati dal codice driver. Una struttura viene utilizzata per identificare il thread, un parametro importante all'interno della struttura è il campo nome. Inoltre contiene una struttura per CPU che in turn contiene la coda waitqueue su cui il thread attende e una lista di collegamenti per aggiungere la struttura che definisce il lavoro, cioè la funzione e i dati. Il thread worker ottiene quella struttura come parametro di input. Il thread viene eseguito e attende l'attesa per qualcuno per svegliare il thread. Viene creata una struttura di lavoro che definisce la funzione. Quando una work codeue è programmata, la struttura viene aggiunta alla coda dell'elenco di collegamenti e il thread di lavoro viene riattivato. Al risveglio, il thread worker esegue l'elenco dei collegamenti definito nella struttura per CPU e inizia ad eseguire le funzioni definite con la struttura di lavoro come parametro. Dopo l'esecuzione rimuove la voce dall'elenco dei collegamenti.
Un ottimo blog spiega tutti il concetto di base kernel Linux con esempi: http://tuxthink.blogspot.co.il/2011/09 /workqueues-1-introduction.html http://tuxthink.blogspot.co.il/2011/09/workqueue-2-declarework.html http://tuxthink.blogspot.co.il/2011/09/workqueue -3-using-runtime-creation.html – 0x90