4,工作调度
*默认工作队列处理函数
void work_handler(void *data)//在好几个版本的内核里没有发现这个函数或者宏定义,只找到了work_handlers,它其实是个函数指针数组,具体实现没仔细看,大概就是为初始化一些函数,再看时机进行调度。
使用schedule_work()对默认的event队列进程调度。
*调度新创建的工作队列
int queue_work(struct workqueue_struct *wq, struct work_struct *work)
从其参数可知,它是对某种类型的任务进行工作调度,即这种类型的每个CPU中的工作者线程的每个体work_struct都要被调度。
由于上面使用的是per_cpu_ptr(keventd_wq->cpu_wq, cpu),其返回的是CPU为cpu的keventd_wq->cpu_wq workqueue_struct结构,即默认的工作队列,所以上面其实可以使用schedule_work(&work)进行调度。使用queue_work一般是自己指定自行创建的工作队列wq,这个工作队列由 create_workqueue()创建返回。
如何使用Linux工作队列workqueue(2)
内容版权声明:除非注明,否则皆为本站原创文章。