一、核心数据结构 1. struct work_struct 2. struct cpu_workqueue_struct 3. struct workqueue_struct 4. 这三个数据结构之间的关系 5. 工作队列实现框架(singlethread) 二、创建并初始化工作队列 工作者线程相关参见下一小节。 三、工作者线程 在创建工作队列时,需要创建对应的工作者线程。那么为什么要创建工作...
static inline bool schedule_work(struct work_struct *work) { return queue_work(system_wq, work); } 该接口调用了 queue_work,将传入的 work 加入到系统预定义的工作队列system_wq 中,当然,驱动开发人员也可以直接使用 queue_work() 接口,将当前工作队列添加到其他的工作队列。 而schedule_delayed_work 的...
structdelayed_work {structwork_struct work;structtimer_list timer;//定时器。用于实现延迟处理}; 工作队列结构体 structworkqueue_struct{structcpu_workqueue_struct*cpu_wq;//指针数组,其每一个元素为per-cpu的工作队列structlist_headlist;constchar*name;intsinglethread;//标记是否仅仅创建一个工作者线程intfr...
schedule_work调度执行一个具体的work,执行的work将会被挂入Linux提供的(默认)工作队列。 staticinlineboolschedule_work(structwork_struct *work); 如果想延迟执行work,可以调用schedule_delayed_work ,其功能类似于schedule_work,不过多了一个延迟。 staticinlineboolschedule_delayed_work(structdelayed_work *dwork,un...
1. struct work_struct 2. struct cpu_workqueue_struct 3. struct workqueue_struct 4. 这三个数据结构之间的关系 5. 工作队列实现框架(singlethread) 二、创建并初始化工作队列 三、工作者线程 四、调度一个任务到工作队列中 五、销毁工作队列 六、Linux内核维护的工作队列 ...
TP中断的处理,一般有种固定模式,两种实现方法,采用work_struct和work_struct workqueue_struct混合都可以处理。 (1)work_struct 定义报点函数 AI检测代码解析 static struct work_struct msg21xx_wq; 1. AI检测代码解析 static int touch_event_handler(void *unused) ...
取消一个work_struct cancel_work(struct work_struct *work); cancel_work_sync(struct work_struct *work); 取消一个work的时候,有可能他正在进行,如果需要等待它执行完,可以使用cancel_work_sync,等待其执行完毕再取消. 强制work的执行 可能有多种原因,当你想work执行的那一刻,工作队列正在执行别的work或者在...
内核里一直运行类似worker thread,它会对工作队列中的work进行处理,大致的工作流程原理可以参考下图所示; 在这里的work则是work_struct变量,并且绑定一个执行函数——typedef void (*work_func_t)(struct work_struct *work);。在worker thread中会对非空的工作队列进行工作队列的出队操作,并运行work绑定的函数。
work_struct : 工作。初始化一个 work 并添加到工作队列后,将会将其传递到合适的内核线程来进行处理,它是用于调度的最小单位。 复制 struct work_struct {atomic_long_t data;struct list_head entry;work_func_t func;#ifdef CONFIG_LOCKDEPstruct lockdep_map lockdep_map;#endif}; ...
DECLARE_WORK(name,void(*func)(void*),void*data); 这样就会静态地创建一个名为name,待执行函数为func,参数为data的work_struct结构。 同样,也可以在运行时通过指针创建一个工作: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 INIT_WORK(struct work_struct*work,woid(*func)(void*),void*data); ...