RTT的IPC機制篇 IPC通訊總結

2021-09-28 17:14:14 字數 1461 閱讀 3200

總結1 rtt通訊方式總結

2023年12月29日

10:47

ipc:inter process communication

1,rtt的通訊機制:

訊息佇列、郵箱、訊號量、互斥量、事件。

2.我又按照其傳輸的內容分為:資料類和非資料類通訊。

非資料類,執行緒間、執行緒與中斷傳輸非資料類資訊,實現執行緒間同步:訊號量、互斥量、事件。而訊號量、互斥量是實現一對一的同步。事件可以實現一對多,多對多的同步。而訊號量只能實現單一同步,而事件可以實現多個事件同步。

3.另外按照能不能在中斷中使用分為:可中斷使用,中斷中不可使用。

中斷中不能用的是:互斥量、阻塞方式的傳送郵件、無限等待的傳送訊息、訊號量、事件。

除了互斥量,其他通訊在中斷中可以使用,但是有限制的:只能傳送訊息/非阻塞方式的郵件/事件/訊號量,而不能接受,為啥不能接受?因為接受不到會阻塞當前執行緒,在中斷中接受你把當前執行緒給阻塞啥意思?躺槍!

4.它們都是非同步通訊。不非同步不行呀,cpu同一時刻只能執行乙個執行緒。所以你發的時候下個執行緒不是同時在收的,不能同步的原因在這!

rtt訊息佇列和郵箱的不同與聯絡

2023年12月29日

10:47

一、不同

1.當郵箱傳送的是個位址時注定這個位址不能是區域性變數的位址,所以郵箱傳送的郵件不要用區域性變數用全域性或者靜態變數,因為如果用區域性變數傳送了,那接受時存放的是這個區域性變數的指標,傳送完了已經把那個區域性變數已經給釋放掉了,這個時候你再指它,就不對了。

而因為訊息佇列傳送的往往是資料內容而不是指標,這注定訊息佇列,接受和傳送訊息可以是區域性變數或者全域性變數。因為傳送訊息是將訊息的內容是複製到訊息佇列裡面了,接受的時候是從訊息佇列裡面的訊息框裡再拷出來。

2.大小不一樣。郵箱的郵件固定大小就是4位元組,剛好可以存放位址。而訊息大小是使用者自定義的。

總結:(1)不管是郵箱還是訊息,當傳送的是資料位址的時候,這個資料不能是區域性變數,否則這個資料可能已經被釋放掉了你再用它指就不對了。

(2)當然如果都是資料內容的話,那當然區域性變數和全域性變數都可以呀。

(3)郵箱一般傳位址的多,所以最好定義全域性變數。訊息傳資料多,不限制區域性變數或全域性變數,但是也要放心傳位址的情況。

總之,它們兩個傳位址的時候要注意資料不能定義為區域性變數。

推而廣之:以後傳輸資料位址的時候,要檢視下這個資料是不是區域性變數,是的話得當心——如果只是在有效區傳那沒問題,如果無效區域傳那就不對了,比如這個函式裡的區域性變數的位址在別的函式裡就不能用了,因為區域性變數只能在其定義的函式中使用。

二、聯絡

當訊息的大小設定為4個位元組時,和郵箱幾乎沒什麼分別。

訊息可以看成郵箱的進化,訊息是郵箱的全集,郵箱是訊息的子集。在某一條件下,訊息可以轉變成郵箱。

三、應用場景剖析

當只需傳遞的內容4個位元組足夠的時候,用郵箱就夠了。

當傳輸的內容大過4位元組,且非常多的時候、還有緊急內容的時候,用訊息。如果沒有緊急內容,對於郵箱或是訊息可以酌情採用。

程序的通訊機制(IPC)

管道是指用於連線乙個讀程序和乙個寫程序以實現他們之間進行通訊的共享檔案。管道機制必須提供以下三方面的協調能力 互斥 同步 和確定對方存在 管道操作,只能採用半雙工通訊,即某一時刻只能單向傳輸。要實現父子雙方之間相互通訊,則要定義兩個管道。下面則是實現的父子雙方使用管道進行通訊的例項 include ...

程序間通訊機制(IPC)

1.訊號機制 主要用於向乙個或多個程序發非同步事件訊號,訊號可以通過鍵盤中斷觸發,也可以有程序訪問虛擬記憶體中不存在的位址這樣的錯誤來產生。訊號機制還可以用於shell向它們的子程序傳送作業控制命令。linux使用存貯在每個程序task struct結構中的資訊實現訊號機制,它支援的訊號數受限於處理...

Ipc通訊機制 socket的 概念

socket通訊 用來實現程序間通訊。也被稱為套接字 是網路通訊中的概念,分為流式套接字 和 使用者套接字 兩種 對應網路傳輸控制層的 tcp 和udp 協議 tcp 協議 是面向連線的協議 提供穩定的雙向通訊功能。連線建立需要經過 三次握手 tcp 協議 為了資料傳輸功能的穩定,提供超時重傳機制,...