任何人都可以帮助我理解"传递数据(共享或私人)" workQueue?
static void sample_work_fn(struct work_struct *Wq)
{
...........
...........
}
static DECLARE_WORK(sample_work, sample_work_fn);
static void samp_sysrq(int arg)
{
schedule_work(sample_work);
}
如果我需要使用我的工作队列传递/共享数据,这怎么可能?
答案 0 :(得分:3)
谢谢本杰明,
我在" Linux transfer parameter for function in DECLARE_WORK"中找到了相关信息。真的很直白,这真的让我理解。这个链接说
DECLARE_WORK主要用于静态工作项,不需要实例数据。你想要INIT_WORK。使用它来初始化作为另一个结构(您选择的)的成员的work_struct,然后在回调中使用container_of来获取指向包含结构的指针。这个container_of模式在Linux内核中非常常见,所以熟悉它是一个好主意!