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][c/c++]代码片段01

[linux][c/c++]代码片段02

perl中的队列

linux打开终端如何启动scala,如何在终端下运行Scala代码片段?

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

linux中怎么查看mysql数据库版本