工作佇列 小任務機制

2021-10-17 14:43:34 字數 1967 閱讀 2945

1.系統分配工作者執行緒:

宣告結構體:

struct  work_struct  detect_i2c_work;
初始化任務

//延遲指定滴答 工作佇列的初始化

init_delayed_work

(&detect_i2c_work, detect_i2c_work_func)

;//不延遲

init_work

(delayed_work, delayed_work_handler, data)

;

排程

//延遲指定滴答 排程

schedule_delayed_work

(&detect_i2c_work,

msecs_to_jiffies

(detect_i2c_time));

//不延遲 排程

schedule_work

(delayed_work)

;

2、手動建立工作者執行緒:

建立工作者執行緒:

struct workqueue_struct *

create_singlethread_workqueue

(const

char

*name)

;

宣告結構體:

struct  work_struct  ***xx_work;
初始化任務

//延遲指定滴答 工作佇列的初始化

init_delayed_work

(&******_work, detect_i2c_work_func)

;//不延遲

init_work

(&******_work, delayed_work_handler, data)

;

排程

//延遲指定滴答 排程

queue_delayed_work

(struct workqueue_struct *wq,

struct work_struct

*work,

unsigned

long delay)

;//不延遲 排程

queue_work

(struct workqueue_struct *wq,

struct work_struct

*work)

;

小任務機制

struct tasklet_struct ***;

//初始化

void

tasklet_init

(struct tasklet_struct *t,

void

(*func)

(unsigned

long data)

,unsigned

long data)

;//排程

void

__tasklet_hi_schedule

(struct tasklet_struct *t)

//強制禁用tasklet 不等待執行完成

void

tasklet_disable_nosync

(struct tasklet_struct *t)

;//阻塞等待tasklet 執行結束後,禁用指定的tasklet

void

tasklet_disable

(struct tasklet_struct *t)

;//啟用之前禁用的tasklet 必須存在禁用,

static

inline

void

tasklet_enable

(struct tasklet_struct *t)

工作佇列實現機制 一

walle project android 2.2 and linux 2.6.32 一 工作項 工作佇列和工作者執行緒 把推後執行的任務叫做工作 work 描述它的資料結構為work struct,這些工作以佇列結構組織成工作佇列 workqueue 其資料結構為workqueue struct,...

下半部機制之工作佇列

工作佇列是一種不同於軟中斷和微執行緒的一種下半部延遲機制。工作佇列將工作延遲到乙個核心執行緒中執行,它執行在程序上下文中,它是可排程的,並且可以休眠。通常,如果延遲的工作中需要休眠,就使用工作佇列,否則使用軟中斷或微執行緒。由於核心開發者反對建立乙個新的核心執行緒,因此,應當盡量使用工作佇列,它其實...

工作佇列分析

一 用法 struct cpu workqueue struct cacheline aligned the externally visible workqueue abstraction is an array of per cpu workqueues struct workqueue str...