linux作为一种操作系统,等待队列机制在内核中发挥着非常重要的作用。比如,在处理临界区的访问,需要实现消息循环,消息队列管理异步事件等情况,都需要用到等待队列。其工作方式是,当发生请求时,会根据状态和目的地址,将请求加入等待队列中,等待cpu执行。
创新互联企业建站,十多年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于网站建设、成都网站设计中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。
下面,我们就以Linux系统为例,来介绍一下等待队列的运用。首先,要了解等待队列,需要分析和理解内核操作系统中的代码,下面以一段核心模块的常用函数__wait.on_bit()为例,介绍一下它的运用和实现的步骤:
void __wait_on_bit(struct wait_queue_head *WQ, struct wait_queue_entry *wq_entry,int (*action)(struct wait_queue_entry *))
{
struct wait_queue *wait;
signed long timeout;
//注册要等待的wait queue
wait = prepare_to_wait_exclusive(wq, wq_entry, TASK_UNINTERRUPTIBLE);
timeout = MAX_SCHEDULE_TIMEOUT;
//释放wq->lock锁
smp_mb();
//等待队列条件满足
while (!(*action)(wq_entry)) {
timeout = io_schedule_timeout(timeout);
wait_io_event_timeout(wq_entry, timeout);
//重新获得wq->lock
smp_mb();
if (signal_pending_state(TASK_UNINTERRUPTIBLE, wq_entry->private))
break;
}
//结束wait并获取wq->lock
finish_wait(wq, wait);
}
这段代码的框架如下:首先,需要注册一个进入等待的队列wait,随后会获取超时时间timeout,然后释放锁wq->lock,同时检查等待条件是否满足。如果满足,则调用io_schedule_timeout()方法进行超时处理;如果不满足,通过wait_io_event_timeout()方法进行等待,直到条件满足时才结束等待。最后,重新获得wq->lock,等待结束。
以上,就是Linux等待队列的运用,从而实现临界区的处理,信号的传递以及消息的处理等功能。其中,需要特别注意的是,wait中的队列,在进行wait_io_event_timeout()操作前,要保证能够获得可执行的lock,以保证在等待过程中的安全性。
创新互联网络推广网站建设,网站设计,网站建设公司,网站制作,网页设计,1500元定制网站优化全包,先排名后付费,已为上千家服务,联系电话:13518219792
本文名称:解析Linux等待队列的运用(linux等待队列的使用)
文章位置:http://www.csdahua.cn/qtweb/news43/519293.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网