天天看點

Linux IPC實踐(13) --System V IPC綜合實踐

實踐:實作一個先進先出的共享記憶體shmfifo

Linux IPC實踐(13) --System V IPC綜合實踐

   使用消息隊列即可實作消息的先進先出(FIFO), 但是使用共享記憶體實作消息的先進先出則更加快速;

   我們首先完成C語言版本的shmfifo(基于過程調用), 然後在此基礎上實作C++版本的ShmFifo, 将1塊共享記憶體與3個信号量(1個mutext信号量, 1個full信号量, 1個empty信号量)封裝成一個類ShmFifo, 然後編寫各自的測試代碼;

shmfifo說明:

   将申請到的共享記憶體作為一塊緩沖區, 将該記憶體的首部(p_shm到p_payload的内容)格式化為如上圖所示的形式;

   讀/寫程序不斷的按照現金先出的原則從其中讀出/寫入資料, 則讀/寫程序就可以看成生産者/消費者了, 是以,使用信号量sem_mutex(初值為1)來互斥通路共享記憶體, 使用sem_full(初值為共享緩沖區塊數), sem_empty(初值為0)來同步兩個程序.

C版本:

C++版本:

附-Makefile, 兩個程式都可以使用該檔案

繼續閱讀