Linux中的工做隊列

工做隊列(work queue)是Linux kernel中將工做推後執行的一種機制。這種機制和BH或Tasklets不一樣之處在於工做隊列是把推後的工做交由一個內核線程去執行,所以工做隊列的優點就在於它容許從新調度甚至睡眠。數據結構

工做隊列是2.6內核開始引入的機制,在2.6.20以後,工做隊列的數據結構發生了一些變化,所以本文分紅兩個部分對2.6.20以前和以後的版本分別作介紹。函數

 

I、2.6.0~2.6.19

 

數據結構:spa

1線程

2指針

3code

4隊列

5table

6class

7變量

8

struct work_struct {

    unsigned long pending;

    struct list_head entry;

    void (*func)(void *);

    void *data;

    void *wq_data;

    struct timer_list timer;

};

pending是用來記錄工做是否已經掛在隊列上;

entry是循環鏈表結構;

func做爲函數指針,由用戶實現;

data用來存儲用戶的私人數據,此數據便是func的參數;

wq_data通常用來指向工做者線程(工做者線程參考下文);

timer是推後執行的定時器。

work_struct的這些變量裏,func和data是用戶使用的,其餘是內部變量,咱們能夠不用太過關心。

相關文章
相關標籤/搜索