Linux驱动开发笔记_工作队列&共享队列

1.工作队列

1.工作队列运行在特殊的内核进程中
2.工作队列函数可以修休眠;
3.工作队列中的任务函数不能访问用户空间;
4.工作队列是延迟操作的一种方法;

1.创建工作队列

#define create_workqueue(name)						\
	alloc_workqueue("%s", WQ_MEM_RECLAIM, 1, (name))
	
#define create_singlethread_workqueue(name)				\
	alloc_ordered_workqueue("%s", WQ_MEM_RECLAIM, name)
name 是创建的工作队列名称。宏定义的返回值: struct workqueue_struct  *myqueue  类型的指针。

2.创建任务(用于提交到工作队列)

两种方法:静态定义,动态方式
DECLARE_WORK(mywork,mywork_func);   //定义并且初始化
struct work_struct mywork;
INIT_WORK(&mywork,mywork_func)

3.将任务提交到工作队列

static inline bool queue_work(struct workqueue_struct *wq,
			      struct work_struct *work)
返回值: 当任务被添加到工作对列成功时,函数返回1;

4.清理工作队列中的任务

extern void flush_workqueue(struct workqueue_struct *wq);

5.释放工作队列

extern void destroy_workqueue(struct workqueue_struct *wq);

2.共享队列

1.原理与工作队列相同,但是共享队列是由内核自行创建的;不用自己创建。
2.共享队列意味着和别人共享,如果别人或者自己的任务长时间休眠,那么会影响到其余任务的执行。

与工作队列调度方法不同,其余大致相同。

static inline bool schedule_work(struct work_struct *work)
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页