如何使用Linux Work Queue

max*_*max 13 kernel linux-kernel

Linux工作队列是具有进程上下文的内核级线程.我试图用它作为kthread的替代品,它没有特定的进程上下文.但是如何将数据传递到工作队列?work_struct有一个数据字段,类型为atomic_long_t.我无法将指针传递给此字段.我该怎么做?

另外,我找不到工作队列的单个具体示例.你能建议吗?

Gnu*_*rou 20

如果要将数据传递到工作队列函数,只需将work_struct结构嵌入到自己的数据结构中,然后container_of在工作函数中使用它来检索它.

至于一个简单的例子,内核充满了它 - 只是git grep work_struct.您可以查看drivers/cpufreq/cpufreq.c(handle_update函数)一个简单的示例.下面还文章嵌入了一个例子,在结束时,但它不使用container_of,而是依赖于一个事实,即一个结构的第一部件具有相同的地址作为其父:

http://www.ibm.com/developerworks/linux/library/l-tasklets/index.html