linux工作佇列

2021-08-01 10:49:42 字數 1388 閱讀 1381

linux工作佇列

1. 功能描述

工作佇列(work queue)是linux kernel中將工作推後執行的一種機制。這種機制和bh或tasklets不同之處在於工作佇列是把推後的工作交由乙個核心執行緒去執行,因此工作佇列的優勢就在於它允許重新排程甚至睡眠。

2. 工作佇列結構體

typedef void (*work_func_t)(struct work_struct *work); 

struct work_struct ;

struct delayed_work ;

3. 建立工作佇列

init_work(struct work_struct *work, work_func_t func);

init_delayed_work(struct delayed_work *work, work_func_t func);

4. 加入工作佇列

a. 預設佇列

int schedule_work(struct work_struct *work);

int schedule_delayed_work(struct delayed_work *work, unsigned long delay);

b. 自己建立的佇列

struct workqueue_struct *create_workqueue(const char *name);

//自己建立核心工作佇列workqueue_struct

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

//將工作佇列加入到work中

int queue_delayed_work(struct workqueue_struct *wq, struct delayed_work *work, unsigned long delay);

5. 重新整理(喚醒)工作佇列

void flush_scheduled_work(void);

void flush_workqueue(struct workqueue_struct *wq);

6. 取消、釋放工作佇列

int cancel_delayed_work(struct delayed_work *work);

void destroy_workqueue(struct workqueue_struct *wq);

Linux 工作佇列

工作佇列 work queue 是另外一種將工作推後執行的形式,它和tasklet有所不同。工作佇列可以把工作推後,交由乙個核心執行緒去執行,也就是說,這個下半部分可以 在程序上下文中執行。這樣,通過工作佇列執行的 能佔盡程序上下文的所有優勢。最重要的就是工作佇列允許被重新排程甚至是睡眠。那麼,什麼...

linux工作佇列

在linux核心中,對下半部 或者說推後執行的工作 的處理方式有好幾種,包括bh bottom half 軟中斷,tasklets和工作佇列等等。在2.6核心中,大名鼎鼎的bh處理被廢除,新增了更方便的工作佇列。工作佇列的方便之處在於它把工作推後,交由乙個核心執行緒去執行,這個核心執行緒總會在程序上...

linux 工作佇列 補充

走入linux的殿堂已經有一年有餘了,在這裡我想將linux的各種實現機制分析一遍,一方面對自己來說也是溫故而知新,另一方面,促進大家的交流,最好能夠給大家一些拋磚引玉的啟迪。我是硬體出身,搞硬體已經好多年了,從是專門軟體開發也接近兩年了,在這一段時間內我越發認為軟硬體協同設計是未來發展的主流,軟硬...