arp*_*shi 1 linux linux-device-driver linux-kernel
我对 Linux 内核开发非常陌生,并且在理解其功能时感到困惑create_singlethread_workqueue()。任何人都可以提供一个基本示例,说明它到底做什么create_singlethread_workqueue()以及它的工作是什么INIT_WORK。从我读到的解释来看,它说它为处理器创建一个队列并初始化工作。但无法理解什么是工作,也无法理解如何通过基本示例来理解。
小智 6
该函数create_singlethread_workqueue()将创建一个工作队列。工作队列只是您向其提交工作的队列。这里的“工作”是指您想要在给定时间点运行的任何功能。这项工作将由单个工作线程执行,该线程也是在您调用 时创建的create_singlethread_workqueue()。
struct workqueue_struct *create_singlethread_workqueue(const char *name);
Run Code Online (Sandbox Code Playgroud)
其次,INIT_WORK是一种在运行时初始化工作结构的机制。还有一种方法可以在编译时进行初始化。
INIT_WORK(struct work_struct *work, void (*function)(void *), void *data);
Run Code Online (Sandbox Code Playgroud)
这意味着每当我们将work_struct *workon 排队到 a时workqueue,所指向的函数都(*function)将使用 argument 来调用void *data。让我们看看如何对工作进行排队:
int queue_work(struct workqueue_struct *queue, struct work_struct *work);
Run Code Online (Sandbox Code Playgroud)
因此,我们在这里将工作排队/提交到workqueue *queue. 这最终将执行由中指定的(*function)参数指向的函数void *dataINIT_WORK()