1. 程式人生 > >系統IPC三種方式

系統IPC三種方式

訊息佇列

    訊息佇列能夠克服早期UNIX通訊機制的一些缺點。作為早期UNIX通訊機制之一的訊號能夠傳送的資訊量有限,但是訊號這種通訊方式更像“即時”的通訊方式,它要求接收訊號的程序在某個時間範圍內對訊號作出反應。訊息佇列就是一個訊息的連結串列。可以把訊息看作一個記錄,具有特定的格式及特定的優先順序。對訊息佇列有寫許可權的程序可以按照一定的規則新增新訊息,對訊息佇列有讀許可權的程序則可以從訊息佇列中讀走訊息,訊息佇列是隨核心持續的。

    目前有兩種訊息佇列———POSIX訊息佇列和系統V訊息佇列。系統V訊息佇列目前被大量使用,考慮到程式的可移植性,新開發的系統應儘量使用POSIX訊息佇列。

對訊息佇列的操作有下面三種類型。

(1)開啟或建立訊息佇列

(2)讀寫操作

struct msgbuf
{
    long mtype;
    char mtext[1];
}

 (3)獲得或設定訊息佇列屬性

訊號燈

訊號燈與其他程序間通訊方式不大相同,它主要提供對程序間共享資源訪問控制機制。相當於記憶體的標誌,程序可以個根據它判定是否能夠訪問某些共享資源,同時,程序也可以修改該標誌。除了用於控制外,還可用於程序同步。訊號燈有以下兩種型別。

    (1)二值訊號燈:最簡單的訊號燈形式,訊號燈的值只能取0、1.類似於互斥鎖。

    (2)計算訊號燈:訊號燈的值可以取任意非負值。

對訊號燈的操作:

(1)開啟建立訊號燈;

(2)訊號燈值操作;

(3)獲得或設定訊號燈屬性;

共享記憶體

共享記憶體可以說是最有用的程序間通訊方式,也是最快的IPC形式。兩個不同程序A、B共享記憶體的意思是,同一塊實體記憶體被對映到程序A、B各自的程序地址空間,程序A可以即時看到程序B對共享記憶體中資料的更新,反之亦然。由於多個程序共享同一記憶體區域,必然需要某種同步機制,互斥鎖和訊號量都可以。馬丹不想寫了