使用工作佇列

2021-05-10 09:07:25 字數 1566 閱讀 5343

驅動為需要延遲處理的工作建立一

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