linux 工作队列
时间: 2023-12-01 13:42:36 浏览: 39
Linux工作队列是一种异步执行的机制,它允许内核在不同的上下文中执行代码。工作队列通常用于在中断上下文中安排延迟的工作,以避免在中断上下文中执行耗时的操作。工作队列可以在进程上下文或内核线程上下文中执行,这使得它们非常灵活。以下是一个简单的例子,演示如何在内核模块中使用工作队列:
```c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/workqueue.h>
static struct workqueue_struct *my_wq;
static struct delayed_work my_work;
static void my_work_func(struct work_struct *work)
{
printk(KERN_INFO "my_work_func Executed\n");
}
int init_module(void)
{
printk(KERN_INFO "Creating Work Queue\n");
my_wq = create_workqueue("my_queue");
if (my_wq) {
printk(KERN_INFO "Scheduling Work\n");
INIT_DELAYED_WORK(&my_work, my_work_func);
queue_delayed_work(my_wq, &my_work, 5 * HZ);
}
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Cleaning Up\n");
cancel_delayed_work(&my_work);
flush_workqueue(my_wq);
destroy_workqueue(my_wq);
}
```
在这个例子中,我们创建了一个名为“my_queue”的工作队列,并定义了一个名为“my_work”的延迟工作。在模块初始化期间,我们将延迟工作添加到工作队列中,并在5秒后执行。在模块清理期间,我们取消延迟工作并清空工作队列。