工作队列使用方法(2.6.20)
来源:互联网 发布:疯狂美工自由布局 编辑:程序博客网 时间:2024/05/23 14:18
工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。
一、用到得函数如下:
INIT_WORK(_work, _func, _data);int schedule_work(struct work_struct *work);int schedule_delayed_work(struct work_struct *work, unsigned long delay);void flush_scheduled_work(void);int cancel_delayed_work(struct work_struct *work);1、初始化指定工作,目的是把用户指定的函数_func及_func需要的参数_data赋给work_struct的func及data变量。
2、对工作进行调度,即把给定工作的处理函数提交给缺省的工作队列和工作者线程。工作者线程本质上是一个普通的内核线程,在默认情况下,每个CPU均有一个类型为“events”的工作者线程,当调用schedule_work时,这个工作者线程会被唤醒去执行工作链表上的所有工作。
3、延迟执行工作,与schedule_work类似。
4、刷新缺省工作队列。此函数会一直等待,直到队列中的所有工作都被执行。
5、flush_scheduled_work并不取消任何延迟执行的工作,因此,如果要取消延迟工作,应该调用cancel_delayed_work。
以上均是采用缺省工作者线程来实现工作队列,其优点是简单易用,缺点是如果缺省工作队列负载太重,执行效率会很低,这就需要我们创建自己的工作者线程和工作队列。struct workqueue_struct *create_workqueue(const char *name);int queue_work(struct workqueue_struct *wq, struct work_struct *work);int queue_delayed_work(struct workqueue_struct *wq, struct work_struct *work, unsigned long delay);void flush_workqueue(struct workqueue_struct *wq);void destroy_workqueue(struct workqueue_struct *wq);1、创建新的工作队列和相应的工作者线程,name用于该内核线程的命名。
2、类似于schedule_work,区别在于queue_work把给定工作提交给创建的工作队列wq而不是缺省队列。
3、延迟执行工作。
4、刷新指定工作队列。
5、释放创建的工作队列。
二、实例代码如下:
void my_func(void *data){ char *name = (char *)data; printk(KERN_INFO “Hello world, my name is %s!\n”, name);} struct workqueue_struct *my_wq = create_workqueue(“my wq”);struct work_struct my_work; INIT_WORK(&my_work, my_func, “Jack”);queue_work(my_wq, &my_work); destroy_workqueue(my_wq);
- 工作队列使用方法(2.6.20)
- 工作队列使用方法(2.6.20之后)
- 工作队列使用方法
- 内核工作队列使用方法
- 内核的 工作队列 使用方法,struct work_struct
- ogre1.7的工作队列的使用方法
- linux内核工作队列的使用方法
- 内核的 工作队列 使用方法,struct work_struct
- 内核的 工作队列 使用方法,struct work_struct
- 内核的 工作队列 使用方法,struct work_struct
- 内核的 工作队列 使用方法,struct work_struct
- 工作队列(workqueue)
- 工作队列(1)
- 工作队列(2)
- 工作队列(workqueue)
- 内核中工作队列(linux工作队列)
- 内核中工作队列(linux工作队列)
- 内核中工作队列(linux工作队列)
- JAVA 比较两个日期相差的天数
- 策略模式----Java
- 异构数据库迁移 db2---oracle
- 【Linux基础】数据存储优先顺序
- 可变参数
- 工作队列使用方法(2.6.20)
- nagle算法
- 详解大端模式和小端模式
- std::string的工具函数
- 编译GNU make
- 部署python的web项目
- Linux mysql 更改数据存储路径
- 第一章(3)——执行计划重用
- jquery学习笔记