91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

消息隊列應用于線程間通信的簡單例子

Linux大陸 ? 來源:Linux大陸 ? 2023-05-12 10:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是LinuxZn。

在應用開發中,生產者,消費者的模型非常常見,一方產生數據并把數據放入隊列中,而另一方從隊列中取數據,先進先出。

應用:線程間通信/進程間通信。Hello系列 | 多線程編程基礎!

Linux系統中提供了兩種不同接口的消息隊列:

POSIX消息隊列。POSIX為可移植的操作系統接口

System V消息隊列。System V 是 AT&T 的第一個商業UNIX版本(UNIX System III)的加強。

其中,POSIX消息隊列可移植性較強,使用較廣。

Linux系統中提供的消息隊列一般應用于進行間通信,但也可以用于線程間通信。

本文介紹POSIX消息隊列應用于線程間通信。

頭文件:

#include/*ForO_*constants*/
#include/*Formodeconstants*/
#include

編譯鏈接需要加上 -lr 鏈接。

Linux內核提供了一系列函數來使用消息隊列:

/**
*@brief創建消息隊列實例
*
*Detailedfunctiondescription
*
*@param[in]name:消息隊列名稱
*@param[in] oflag:根據傳入標識來創建或者打開一個已創建的消息隊列
-O_CREAT:創建一個消息隊列
-O_EXCL:檢查消息隊列是否存在,一般與O_CREAT一起使用
-O_CREAT|O_EXCL:消息隊列不存在則創建,已存在返回NULL
-O_NONBLOCK:非阻塞模式打開,消息隊列不存在返回NULL
-O_RDONLY:只讀模式打開
-O_WRONLY:只寫模式打開
-O_RDWR:讀寫模式打開
*@param[in] mode:訪問權限
*@param[in] attr:消息隊列屬性地址
*
*@return成功返回消息隊列描述符,失敗返回-1,錯誤碼存于error中
*/
mqd_tmq_open(constchar*name,intoflag,mode_tmode,structmq_attr*attr);

/**
*@brief無限阻塞方式接收消息
*
*Detailedfunctiondescription
*
*@param[in]mqdes:消息隊列描述符
*@param[in] msg_ptr:消息體緩沖區地址
*@param[in] msg_len:消息體長度,長度必須大于等于消息屬性設定的最大值
*@param[in] msg_prio:消息優先級
*
*@return成功返回消息長度,失敗返回-1,錯誤碼存于error中
*/
mqd_tmq_receive(mqd_tmqdes,char*msg_ptr,size_tmsg_len,unsigned*msg_prio);

/**
*@brief指定超時時間阻塞方式接收消息
*
*Detailedfunctiondescription
*
*@param[in]mqdes:消息隊列描述符
*@param[in] msg_ptr:消息體緩沖區地址
*@param[in] msg_len:消息體長度,長度必須大于等于消息屬性設定的最大值
*@param[in] msg_prio:消息優先級
*@param[in] abs_timeout:超時時間
*
*@return成功返回消息長度,失敗返回-1,錯誤碼存于error中
*/
mqd_tmq_timedreceive(mqd_tmqdes,char*msg_ptr,size_tmsg_len,unsigned*msg_prio,conststructtimespec*abs_timeout);

/**
*@brief無限阻塞方式發送消息
*
*Detailedfunctiondescription
*
*@param[in]mqdes:消息隊列描述符
*@param[in] msg_ptr:待發送消息體緩沖區地址
*@param[in] msg_len:消息體長度
*@param[in] msg_prio:消息優先級
*
*@return成功返回0,失敗返回-1
*/
mqd_tmq_send(mqd_tmqdes,constchar*msg_ptr,size_tmsg_len,unsignedmsg_prio);

/**
*@brief指定超時時間阻塞方式發送消息
*
*Detailedfunctiondescription
*
*@param[in]mqdes:消息隊列描述符
*@param[in] msg_ptr:待發送消息體緩沖區地址
*@param[in] msg_len:消息體長度
*@param[in] msg_prio:消息優先級
*@param[in] abs_timeout:超時時間
*
*@return成功返回0,失敗返回-1
*/
mqd_tmq_timedsend(mqd_tmqdes,constchar*msg_ptr,size_tmsg_len,unsignedmsg_prio,conststructtimespec*abs_timeout);

/**
*@brief關閉消息隊列
*
*Detailedfunctiondescription
*
*@param[in]mqdes:消息隊列描述符
*
*@return成功返回0,失敗返回-1
*/
mqd_tmq_close(mqd_tmqdes);

/**
*@brief分離消息隊列
*
*Detailedfunctiondescription
*
*@param[in]name:消息隊列名稱
*
*@return成功返回0,失敗返回-1
*/
mqd_tmq_unlink(constchar*name);

例子:線程1不斷給線程2發送字符串數據。

#include
#include
#include
#include
#include
#include/*ForO_*constants*/
#include/*Formodeconstants*/
#include

#defineMQ_MSG_MAX_SIZE512///

編譯、運行:

09a74950-efe5-11ed-90ce-dac502259ad0.png

以上就是本次的分享,如果文章有幫助,麻煩幫忙轉發,謝謝!

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通信
    +關注

    關注

    18

    文章

    6206

    瀏覽量

    137824
  • Linux
    +關注

    關注

    87

    文章

    11511

    瀏覽量

    213815
  • Linux系統
    +關注

    關注

    4

    文章

    605

    瀏覽量

    28617
  • 線程
    +關注

    關注

    0

    文章

    508

    瀏覽量

    20214
  • 消息隊列
    +關注

    關注

    0

    文章

    34

    瀏覽量

    3133

原文標題:消息隊列應用于線程間通信 | 簡單例子

文章出處:【微信號:Linux大陸,微信公眾號:Linux大陸】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    不同VI隊列通信問題

    使用生產者消費者循環做多VI的數據通信,VI1中處理的數據進入VI2的隊列中,請問VI2的隊列如何在VI1中引用?點隊列引用右鍵創建常量么
    發表于 12-25 14:32

    IOT-OS之RT-Thread--- 線程同步與線程通信

    rt_thread,下面要介紹線程的同步與通信線程同步對象rt_sem / rt_mutex / rt_event和
    發表于 07-02 06:15

    TWEN-ASR ONE 語音識別系列教程(4)---多線程與消息隊列使用

    的節奏不一樣,如下圖所示。從實驗現象我們可以看出,兩個線程的程序都在運行,并且互不干擾。 二、消息隊列的使用與測試2.1消息隊列使用說明???? 消息隊列是一種常
    發表于 07-02 16:27

    請問ESP32雙核如何使用隊列進行任務通信

    隊列是什么?ESP32雙核如何使用隊列進行任務通信
    發表于 01-14 07:24

    如何將郵箱、消息隊列與信號用于RT-Thread線程通信

    1、RT-Thread操作系統的線程通信RT-Thread 操作系統的郵箱用于線程
    發表于 04-15 15:36

    【rtthread學習筆記系列】第三篇:線程是怎樣進行通信

    一、線程通信在裸機中使用全局變量進行功能通信,rtthread提供了三個工具用于
    發表于 04-22 11:20

    RT-thread內核之進程通信設計實現

    、互斥鎖、事件、郵箱、消息隊列。其中前5個主要表現為線程同步,郵箱與消息隊列表現為線程
    發表于 09-01 15:13

    RTT多線程通信機制有哪幾種及推薦?

    針對采用RTT OS ,啟動了4個線程,兩個串口讀寫線程(數據>10byte以上) 一個觸摸按鍵線程 一個顯示線程,針對這幾個線程間數據傳輸
    發表于 04-07 15:52

    QNX消息傳遞及其在線程通信的應用

    本文介紹了QNX 嵌入式實時多任務操作系統的消息傳遞和微內核體系結構的特點,創建線程的方法,消息傳遞的基本原理,以及阻塞式消息傳遞在線程通信的實現方法,并給出了
    發表于 08-11 08:46 ?31次下載

    c線程通信

    對于學習嵌入式Linux開發得朋友說,這篇文章幫助你更加了解線程通信
    發表于 08-09 15:12 ?3次下載

    Java多線程總結之Queue

    在Java多線程應用中,隊列的使用率很高,多數生產消費模型的首選數據結構就是隊列。Java提供的線程安全的Queue可以分為 阻塞隊列和非阻
    發表于 11-28 16:14 ?3502次閱讀
    Java多<b class='flag-5'>線程</b>總結之Queue

    淺談鴻蒙內核代碼調度隊列

    鴻蒙內核代碼中有兩個源文件是關于隊列的,一個是用于調度的隊列,另一個是用于線程通訊的IPC
    的頭像 發表于 10-23 11:00 ?2319次閱讀

    FreeRTOS系列第17篇---FreeRTOS隊列

    隊列是主要的任務通訊方式。可以在任務與任務、中斷和任務傳送信息。大多數情況下,隊列用于具有
    發表于 01-26 17:45 ?4次下載
    FreeRTOS系列第17篇---FreeRTOS<b class='flag-5'>隊列</b>

    RT-Thread文檔_線程通信

    RT-Thread文檔_線程通信
    發表于 02-22 18:29 ?0次下載
    RT-Thread文檔_<b class='flag-5'>線程</b><b class='flag-5'>間</b><b class='flag-5'>通信</b>

    進程通信的消息隊列介紹

    消息隊列是一種非常常見的進程通信方式。
    的頭像 發表于 04-08 17:27 ?536次閱讀
    主站蜘蛛池模板: 五月花综合| 特黄特色大片免费播放器9 特黄特色大片免费视频播放 | 高清一级毛片一本到免费观看 | 日本免费精品视频 | 日本高清色www| 日日碰狠狠添天天爽五月婷 | 久久精品人 | 精品三级国产精品经典三 | 久久婷婷激情综合色综合也去 | 男人j进女人j的视频一进一出 | 日本免费不卡视频 | 一个色中文字幕 | 免费看黄的视频软件 | 一级 黄 色 毛片 | 让她爽的喷水叫爽乱 | 天堂8在线官网 | 乱高h亲女| 韩国免费三片在线视频 | 亚洲欧美视频在线 | 国产视频黄色 | 一级毛片真人免费播放视频 | 欧美大黄 | 五月月色开心婷婷久久合 | 天天摸天天做 | 亚洲黄色三级网站 | 天天爽夜夜爽人人爽一区二区 | 天天躁夜夜躁狠狠躁2021 | 久久性感美女视频 | 91福利国产在线观看网站 | 毛片录像| 亚洲卡一卡2卡三卡4卡国色 | 极品啪啪| 久久久久久久国产精品电影 | 2021久久天天躁狠狠躁夜夜 | 四虎最新紧急入口4hu | 日本人xxxxxxxxxⅹ69 | 日本黄色高清视频网站 | 韩国电影天堂网 | 天堂黄网 | 色a在线| 免费视频一级片 |