•
驅動為需要延遲處理的工作建立一
work_struct
結構,
該結構即為
工作單元
, 它還包含一
函式指標
用來處理具體的延遲工作; •
該工作單元被新增到當前
cpu
的預設工作執行緒
或自定義工作執行緒的工作佇列中等待處理
•在某一時刻
, 工作執行緒被喚醒
, 它將迴圈處理工作佇列中的每乙個
工作單元
。使用系統中的預設工作佇列•首先
, 要為需要延遲處理的工作單元建立乙個
work_struct結構–
核心提供了下面
2 個巨集來方便地建立該結構:•
declare_work
(name, void (*
func
)(void *), void *data);
//靜態建立
•init_work
(struct
work_struct
*work, void (*
func
)(void *),void *data)
//動態初始化
•將該結構放入到
預設工作執行緒的工作佇列
中去,
核心提供以下
2 個巨集操作:–
schedule_work
(work);
–schedule_delayed_work
(work, delay)。–
這2 個巨集操作的主要區別就在於乙個是
立即被排程
, 乙個是
延遲delay
個時鐘週期後被排程
。使用自定義工作佇列 •
建立工作執行緒
使用
struct
workqueue_struct
*create_workqueue
(const char *name)。–
其中, name
為該型別工作工作執行緒的名字
•建立型別為
myworker
的工作執行緒的**如下:
struct
workqueue_struct
*myworker
;myworker
= create_workqueue
( 「myworker」)。
•將work_struct
加入到自定義工作執行緒的工作佇列
中可以採用以下介面
:
–int
queue_work
(struct
workqueue_struct*wq
, struct
work_struct
*work);
–intqueue_delayed_work
(struct
workqueue_struct
*wq,struct
work_struct
*work,unsigned
long delay)
。
Linux工作佇列的使用
linux工作佇列是一種把工作推後執行的機制。推後的工作交由乙個核心執行緒去執行,因此工作佇列的優勢就在於它允許重新排程甚至睡眠。使用工作佇列的流程 主要有兩種,一種使用核心預設的佇列,一種是我們自己建立乙個工作佇列。對於預設預設的工作佇列,如果工作佇列負載太重,執行效率會很低。下面是自己建立的工作...
工作佇列的使用例子
工作佇列 work queue 是另外一種將工作推後執行的形式.linux 2.6核心使用了不少工作佇列來處理任務,他在使用上和 tasklet最大的不同是工作佇列的函式可以使用休眠,而tasklet的函式是不允許使用休眠的。工作佇列的使用又分兩種情況,一種是利用系統共享的工作佇列來新增自己的工作,...
Linux工作佇列的使用
1,定義工作結構體變數bat work static struct work struct bat work 2,編寫乙個實現某功能的工作處理函式 static void wm97xx bat work struct work struct work 3,初始化工作佇列,init work bat ...