work queues 在2.6kernel 中使用去替代2.4 kernel中的task queue. 允许kernel函数延迟在worker thread中被执行.
主要不同点:task queue 是运行在中断的上下文中; work queue是运行在进程上下文中.所以使用work queue有更多的自由度.
摘自Linux Device Driver(III)
static struct work_struct jiq_work;
/* this line is in jiq_init() */
INIT_WORK(&jiq_work, jiq_print_wq, &jiq_data);
/*
* Call jiq_print from a work queue
*/
static void jiq_print_wq(void *ptr)
{
struct clientdata *data = (struct clientdata *) ptr;
if (! jiq_print (ptr))
return;
if (data->delay)
schedule_delayed_work(&jiq_work, data->delay);
else
schedule_work(&jiq_work);
}