一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

干貨:Linux內(nèi)核中等待隊(duì)列的四個(gè)用法

如意 ? 來源:CSDN ? 作者:楊碩 ? 2020-06-20 09:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Linux內(nèi)核里的等待隊(duì)列機(jī)制在做驅(qū)動開發(fā)時(shí)用的非常多,多用來實(shí)現(xiàn)阻塞式訪問,下面簡單總結(jié)了等待隊(duì)列的四種用法,希望對讀者有所幫助。

1. 睡眠等待某個(gè)條件發(fā)生(條件為假時(shí)睡眠):

睡眠方式:wait_event, wait_event_interruptible

喚醒方式:wake_up (喚醒時(shí)要檢測條件是否為真,如果還為假則繼續(xù)睡眠,喚醒前一定要把條件變?yōu)檎妫?/p>

2. 手工休眠方式一:

1)建立并初始化一個(gè)等待隊(duì)列項(xiàng)

DEFINE_WAIT(my_wait) 《==》 wait_queue_t my_wait; init_wait(&my_wait);

2)將等待隊(duì)列項(xiàng)添加到等待隊(duì)列頭中,并設(shè)置進(jìn)程的狀態(tài)

prepare_to_wait(wait_queue_head_t *queue, wait_queue_t *wait, int state)

3)調(diào)用schedule(),告訴內(nèi)核調(diào)度別的進(jìn)程運(yùn)行

4)schedule返回,完成后續(xù)清理工作

finish_wait()

3. 手工休眠方式二:

1)建立并初始化一個(gè)等待隊(duì)列項(xiàng):

DEFINE_WAIT(my_wait) 《==》 wait_queue_t my_wait; init_wait(&my_wait);

2)將等待隊(duì)列項(xiàng)添加到等待隊(duì)列頭中:

add_wait_queue

3)設(shè)置進(jìn)程狀態(tài)

__set_current_status(TASK_INTERRUPTIBLE);

4)schedule()

5)將等待隊(duì)列項(xiàng)從等待隊(duì)列中移除

remove_wait_queue()

其實(shí),這種休眠方式相當(dāng)于把手工休眠方式一中的第二步prepare_to_wait拆成兩步做了,即prepare_to_wait 《====》add_wait_queue + __set_current_status,其他都是一樣的。

4. 老版本的睡眠函數(shù)sleep_on(wait_queue_head_t *queue):

將當(dāng)前進(jìn)程無條件休眠在給定的等待隊(duì)列上,極不贊成使用這個(gè)函數(shù),因?yàn)樗鼘Ω倯B(tài)沒有任何保護(hù)機(jī)制。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213838
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    317

    瀏覽量

    22409
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux驅(qū)動等待隊(duì)列與poll機(jī)制

    ,可以極大的減輕CPU負(fù)荷,在進(jìn)程掛起是可以讓CPU去執(zhí)行其它資源。而通過等待隊(duì)列的方式就可實(shí)現(xiàn)進(jìn)程阻塞,滿足要求時(shí)再喚醒進(jìn)程。
    的頭像 發(fā)表于 09-25 09:00 ?2385次閱讀
    <b class='flag-5'>Linux</b>驅(qū)動<b class='flag-5'>等待</b><b class='flag-5'>隊(duì)列</b>與poll機(jī)制

    RT-thread內(nèi)核之消息隊(duì)列

    ,接著再初始化消息隊(duì)列,此時(shí)消息隊(duì)列為空。刪除消息隊(duì)列:rt_err_t rt_mq_delete(rt_mq_t mq);刪除消息隊(duì)列時(shí),如果有線程被掛起在該消息
    發(fā)表于 03-06 17:17

    學(xué)習(xí)Linux四個(gè)步驟

    學(xué)習(xí)Linux四個(gè)步驟解答:學(xué)習(xí)Linux四個(gè)步驟假設(shè)你是計(jì)算機(jī)科班出身,計(jì)算機(jī)系的基本課程如數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)、體系結(jié)構(gòu)、編譯原理、計(jì)算機(jī)網(wǎng)絡(luò)你全修過我想大概可以分為4
    發(fā)表于 09-24 15:27

    Linux等待隊(duì)列如何實(shí)現(xiàn)

    在軟件開發(fā)中任務(wù)經(jīng)常由于某種條件沒有得到滿足而不得不進(jìn)入睡眠狀態(tài),然后等待條件得到滿足的時(shí)候再繼續(xù)運(yùn)行,進(jìn)入運(yùn)行狀態(tài)。這種需求需要等待隊(duì)列機(jī)制的支持。Linux中提供了
    發(fā)表于 08-05 07:47

    Linux內(nèi)核等待隊(duì)列是什么意思?如何實(shí)現(xiàn)呢

    Linux內(nèi)核等待隊(duì)列是以雙循環(huán)鏈表為基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),與進(jìn)程調(diào)度機(jī)制緊密結(jié)合,能夠用于實(shí)現(xiàn)核心的異步事件通知機(jī)制。在這個(gè)鏈表中,有兩種數(shù)據(jù)結(jié)構(gòu):等待
    發(fā)表于 08-29 16:42

    Linux內(nèi)核修煉之道》精華版

    本書將Linux內(nèi)核的學(xué)習(xí)分為四個(gè)層次:全面了解,掌握基本功;興趣導(dǎo)向,選擇重點(diǎn)深度鉆研;融入
    發(fā)表于 11-09 17:05 ?0次下載

    linux kernel工作隊(duì)列及源碼解析

    1. 前言 工作隊(duì)列(workqueue)的Linux內(nèi)核中的定義的用來處理不是很緊急事件的回調(diào)方式處理方法。 以下代碼的linux內(nèi)核版本
    發(fā)表于 10-27 10:19 ?0次下載

    linux kernel工作隊(duì)列及源碼詳細(xì)講解

    1. 前言 工作隊(duì)列(workqueue)的Linux內(nèi)核中的定義的用來處理不是很緊急事件的回調(diào)方式處理方法. 以下代碼的linux內(nèi)核版本
    發(fā)表于 11-30 17:43 ?694次閱讀

    poll&&epoll之poll實(shí)現(xiàn)

    Linux內(nèi)核中等待隊(duì)列有很多用途,可用于中斷處理、進(jìn)程同步及定時(shí)。我們在這里只說,進(jìn)程經(jīng)常必須等待某些事件的發(fā)生。
    發(fā)表于 05-14 14:41 ?962次閱讀
    poll&&epoll之poll實(shí)現(xiàn)

    淺談鴻蒙內(nèi)核代碼調(diào)度隊(duì)列

    鴻蒙內(nèi)核代碼中有兩個(gè)源文件是關(guān)于隊(duì)列的,一個(gè)是用于調(diào)度的隊(duì)列,另一個(gè)是用于線程間通訊的IPC
    的頭像 發(fā)表于 10-23 11:00 ?2322次閱讀

    鴻蒙內(nèi)核源碼分析:進(jìn)程和Task的就緒隊(duì)列對調(diào)度的作用

    鴻蒙內(nèi)核代碼中有兩個(gè)源文件是關(guān)于隊(duì)列的,一個(gè)是用于調(diào)度的隊(duì)列,另一個(gè)是用于線程間通訊的IPC
    發(fā)表于 11-23 15:48 ?31次下載
    鴻蒙<b class='flag-5'>內(nèi)核</b>源碼分析:進(jìn)程和Task的就緒<b class='flag-5'>隊(duì)列</b>對調(diào)度的作用

    音頻處理器擁有四個(gè)內(nèi)核來支持支持語音的設(shè)計(jì)

    Knowles 的新音頻處理器具有四個(gè)異構(gòu)內(nèi)核和 5.7 MB 共享內(nèi)存,適用于手機(jī)、耳戴式可穿戴設(shè)備、智能揚(yáng)聲器、電視和電器等語音驅(qū)動設(shè)備。
    的頭像 發(fā)表于 08-11 14:30 ?1694次閱讀

    Liteos-a內(nèi)核工作隊(duì)列的實(shí)現(xiàn)原理分析及經(jīng)驗(yàn)總結(jié)——芯??萍糚PG芯片CS1262接入OpenHarmony實(shí)戰(zhàn)

    摘要OpenHarmony系統(tǒng)中使用了liteos-m、liteos-a、linux三種內(nèi)核,工作隊(duì)列linux內(nèi)核引入的一種異步處理機(jī)制
    的頭像 發(fā)表于 04-26 09:26 ?3036次閱讀
    Liteos-a<b class='flag-5'>內(nèi)核</b>工作<b class='flag-5'>隊(duì)列</b>的實(shí)現(xiàn)原理分析及經(jīng)驗(yàn)總結(jié)——芯??萍糚PG芯片CS1262接入OpenHarmony實(shí)戰(zhàn)

    Linux內(nèi)核網(wǎng)絡(luò)擁塞控制算法的實(shí)現(xiàn)框架(二)

    :[Linux內(nèi)核網(wǎng)絡(luò)基礎(chǔ)-TCP相關(guān)的幾個(gè)關(guān)鍵結(jié)構(gòu)體-小記]中進(jìn)行了介紹,如下圖是四個(gè)核心結(jié)構(gòu)體,四個(gè)結(jié)構(gòu)的關(guān)系具有面向?qū)ο蟮奶卣?,通過層層繼承,實(shí)現(xiàn)了類的復(fù)用;
    的頭像 發(fā)表于 07-28 11:34 ?1114次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>網(wǎng)絡(luò)擁塞控制算法的實(shí)現(xiàn)框架(二)

    使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建實(shí)時(shí) Linux 內(nèi)核

    盟通技術(shù)干貨構(gòu)建實(shí)時(shí)Linux內(nèi)核簡介盟通技術(shù)干貨Motrotech如果需要在Linux中實(shí)現(xiàn)實(shí)時(shí)計(jì)算性能,進(jìn)而有效地將
    的頭像 發(fā)表于 04-12 08:36 ?3702次閱讀
    使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建實(shí)時(shí) <b class='flag-5'>Linux</b> <b class='flag-5'>內(nèi)核</b>