linux工作佇列是一種把工作推後執行的機制。推後的工作交由乙個核心執行緒去執行,因此工作佇列的優勢就在於它允許重新排程甚至睡眠。
使用工作佇列的流程:
主要有兩種,一種使用核心預設的佇列,一種是我們自己建立乙個工作佇列。對於預設預設的工作佇列,如果工作佇列負載太重,執行效率會很低。
下面是自己建立的工作佇列的使用流程。
1.建立乙個工作佇列:
struct workqueue_struct *create_workqueue(const char *name)
如果單執行緒既可以滿足要求,最好使用如下函式建立:
struct workqueue_struct *create_singlethread_workqueue(const char *name)
建立新的工作佇列和相應的工作者執行緒,name用於該核心執行緒的命名。
例如:struct workqueue_struct wq = create_singlethread_workqueue("wq");
2.初始化:
init_work(_work, _func, _data)
目的是把使用者指定的函式_func及_func需要的引數_data賦給work_struct的work中的func及data變數。work_struct結構體如下。
/*2.6.32.2,include/linux/workqueue.h*/
struct work_struct ;
例如:init_work(struct work_struct *work,func);
3.把工作提交給建立的佇列:
int queue_work(struct workqueue_struct *wq, struct work_struct *work)
queue_work把給定工作提交給建立的工作佇列wq。
或,int queue_delayed_work(struct workqueue_struct *wq, struct work_struct *work, unsigned long delay)
把給定工作提交給建立的工作佇列wq,並延遲執行工作。
4.結束時,釋放佇列:
destroy_workqueue(struct workqueue_struct *wq)
釋放建立的工作佇列
Linux工作佇列的使用
1,定義工作結構體變數bat work static struct work struct bat work 2,編寫乙個實現某功能的工作處理函式 static void wm97xx bat work struct work struct work 3,初始化工作佇列,init work bat ...
Linux 工作佇列
工作佇列 work queue 是另外一種將工作推後執行的形式,它和tasklet有所不同。工作佇列可以把工作推後,交由乙個核心執行緒去執行,也就是說,這個下半部分可以 在程序上下文中執行。這樣,通過工作佇列執行的 能佔盡程序上下文的所有優勢。最重要的就是工作佇列允許被重新排程甚至是睡眠。那麼,什麼...
linux工作佇列
在linux核心中,對下半部 或者說推後執行的工作 的處理方式有好幾種,包括bh bottom half 軟中斷,tasklets和工作佇列等等。在2.6核心中,大名鼎鼎的bh處理被廢除,新增了更方便的工作佇列。工作佇列的方便之處在於它把工作推後,交由乙個核心執行緒去執行,這個核心執行緒總會在程序上...