Linux队列
Posted 四季帆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux队列相关的知识,希望对你有一定的参考价值。
1.等待队列
等待队列是一种实现阻塞和唤醒的内核机制,与进程调度机制紧密结合,能够用于实现内核中的异步事件通知机制。可以实现线程的软等待,当符合条件时从另一个线程实现软唤醒。
使用方法:
1.定义等待队列 static DECLARE_WAIT_QUEUE_HEAD(wq)
2.定义唤醒标志 static int w_flag = 0; //当且仅当w_flag为真,才唤醒队列
3.在需要阻塞的地方调用wait_event_interruptible(wq,w_flag )函数,使线程进入睡眠
4.在另一个线程(或当前线程的中断函数),先w_flag=1;再wake_up_interruptible(&wq)函数,即可唤醒。
总结:等待队列用于进程的睡眠和唤醒。等待队列的关键点在于等待某个条件(在意动态)。
2.工作队列
工作队列(workqueue)是另外一种将工作推后执行的形式.工作队列可以把工作推后,交由一个内核线程去执行,至于什么时候执行无法确定,可能是马上,也可能是几秒以后,也就是说,这个下半部分可以在进程上下文中执行。最重要的就是工作队列允许被重新调度甚至是睡眠,如果睡眠了就需要唤醒操作,这点不要和等待队列混淆。
总结:工作队列主要用于中断下半部,可能还有其它的地方有延后执行的需求,但是目前没碰到。工作队列的关键点在于延后执行(在意静态)。
3.消息队列
消息队列,本质上是位于内核空间的链表,链表的每个节点都是一条消息。每一条消息都有自己的消息类型,消息类型用整数来表示,而且必须大于 0。将消息写入消息队列,然后再从消息队列中取消息,一般来说是先进先出的顺序,实际应用可选择。主要用于两个进程之间的通信。进程终止或崩溃时,消息队列及其内容并不会被删除。
总结:在另一篇博客《进程间通信》有提到,但是暂时没用到过,再论。
以上是关于Linux队列的主要内容,如果未能解决你的问题,请参考以下文章
linux打开终端如何启动scala,如何在终端下运行Scala代码片段?
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段