工作队列
来源:互联网 发布:php 通过身份证号码 编辑:程序博客网 时间:2024/05/18 02:11
工作队列是内核中用于进行延后工作的一种方式。延后工作在很多地方使用到,比如
1.1个错误中断发生后,触发网络适配器重新启动;
2.同步磁盘缓冲区的文件系统任务;
3.给磁盘发送一个命令,并跟踪存储协议状态机。等等
工作队列辅助库向用户提供了两个接口结构:workqueue_struct和work_struct,使用工作队列的步骤如下
1.创建一个工作队列(或一个workqueue_struct),该工作队列与一个或对个内核线程关联。可以使用create_singlethread_workqueue()创建一个服务于workqueue_struct的内核线程。为了在系统中的每个cpu中的每个cpu上创建一个工作者线程,可以使用create_workqueue()变体。
2.创建一个工作元素(或者一个work_struct)。使用INIT_WORK()可以初始化一个work_struct,填充其工作函数地址和参数。
3.将工作元素提交给工作队列。可以通过queue_work()将work_struct提交给一个专用的workqueue_struct,或者通过schedule_work提交给默认的内核工作线程。
使用工作可以省去锁的使用。使用方法
#include <linux/workqueue.h>struct workqueue_struct *wq;static int __init wq_init(){ wq = create_singlethread_workqueue(); return 0;}int submit_a_work(void (*fun)(void *vlaue), void *value){ static work_struct *a_work; a_work = kmalloc(sizeof(struct work_struct), GFP_KERNEL); INIT_WORK(a_work, fun, value); queue_work(wq, a_work); return 0; }
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- 工作队列
- CString转换成int CString类相应函数
- 关于新技术学习的10点建议
- OSSEC-编写自己的DECODE
- HDU 2841 Visible Trees
- NYOJ “舞蹈家”ST(2001欧洲区域赛决赛)
- 工作队列
- Verilog HDL阻塞与非阻塞的几个例子!
- 安卓界面布局总结
- 题目推荐—BZOJ 水题推荐
- Nginx 代码分析
- 创业篇之五:优雅的领导魅力
- innodb insert buffer merging
- Js、jquery学习笔记
- 随笔之GoldFish Kernel启动过程中arm汇编分析