工作队列

来源:互联网 发布: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;    }


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我老婆有精神病怎么办 在郑州怎么办完税证明 中专没考上大专怎么办 考研两次没考上怎么办 2018造价员取消后怎么办 造价员取消了投标怎么办 造价员考试取消后怎么办 只拿到结业证怎么办 本科只有结业证怎么办 健身后肌肉水肿怎么办 大腿面肌肉疼怎么办 跑步后大腿酸疼怎么办? 运动后大腿胀痛怎么办 尔雅课程没看完怎么办 国家课程校本化怎么办 上海买房限购怎么办 投资公司要求回购股份怎么办 超过应届生落户年龄怎么办 造价员章到期了怎么办 造价员继续教育过期了怎么办 sd卡存储不够怎么办? 进项税大于销项税怎么办 公司扣员工奖金怎么办 墙面大面积有霉怎么办 电脑总是断网怎么办 造价师资格证书丢了怎么办 行测做题速度太慢怎么办 普通话准考证丢了怎么办 信用卡还款逾期了怎么办 淮北建洗煤厂需要怎么办 建设工程不结算怎么办 考监理没有职称怎么办 公开招标两次招标失败怎么办 山东省植保员证怎么办 工伤没开病假单怎么办 邮储银行怎么办金卡 农机被交警查怎么办 广联达识别板筋负筋重叠怎么办 掌上品的钱怎么办 财务纠纷被起诉怎么办 牙齿补后疼痛怎么办