表。当一个工作者线程被唤醒时,它会执行它的链表上的所有工作。当工作完毕时,他会将相应的work_struct对象从链表中移去。
7.4.2 使用工作队列
(1)创建推后的工作
首先要做的是实际创建一些需要推后执行的工作。可以通过DECLARE_WORK在编译时静态的创建该结构体:
DECLARE_WORK(name, void (*func) (void *), void *data);
这样就会静态的创建一个名为name,处理函数为func,参数为data的work_struct结构体。也可以在运行时通过指针创建一个工作:
INIT_WORK(struct work_struct *work, void (*func)(void *), void *data); 这样就动态的初始化了一个由work指向的工作。
(2)工作队列的处理函数
原型是:void work_handler(void *data)
(3)对工作进行调度
现在工作已经创建,我们可以调度它了,要把给定工作的处理函数提交给默认的events工作线程,只需调用: schedule_work(&work); work马上就会被调度,一旦其所在的处理器上的工作者线程被唤醒,它就会被执行。