程序通訊與程序同步

2021-08-22 12:06:41 字數 1284 閱讀 7754

多個程序可以共享系統中的各種資源,但其中許多資源一次只能為乙個程序使用,我們把一次僅允許乙個程序使用的資源稱為臨界資源。(許多物理裝置都屬於臨界資源,如印表機等)

對臨界資源的訪問必須互斥進行,在每個程序中,訪問臨界資源的那段**稱為臨界區。

程序通訊與同步的目的主要有下面:

(1)資料傳輸:乙個程序需要將他的資料傳送給另乙個程序;

(2)共享資料:多個程序想要操作共享資料,乙個程序對共享資料的更改,另乙個程序應該能看到;

(3)通知事件:乙個程序需要向另乙個或另一組程序傳送訊息,通知他發生了某種時間(如程序終止要通知父程序);

(4)資源共享:多個程序之間共享同樣的資源。為了做到這一點,需要核心提供鎖和同步機制;

(5)程序控制:有些程序希望完全控制另乙個程序的執行(如debug程序),此時控制程序希望能夠攔截另乙個程序所有陷入和異常,並能夠及時知道它的狀態改變。

linux下程序間通訊的幾種主要手段:

(1)管道(pipe)及有名管道(named pipe):管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除了具有管道所具有的功能外,他還允許無親緣關係程序間的通訊;

(2)訊號(signal):訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身;

(3)message(訊息佇列):訊息佇列是訊息的鍊錶,包括posix訊息佇列system v訊息佇列。有足夠許可權的程序可以向佇列中新增資訊,被賦予讀取許可權的程序則可以讀走佇列中的訊息。訊息佇列克服了訊號承載資訊量少,管道智慧型承載無格式位元組流以及緩衝區太小受限等缺點;

(4)共享記憶體:使得多個程序可以訪問同一塊記憶體空間,是最快的可用ipc形式。是針對其他通訊機制執行效率較低而設計的。往往與其他通訊機制,如訊號量結合使用,來達到程序間的同步與互斥。

(5)訊號量:主要作為程序間以及同一程序不同執行緒之間的同步手段

(6)套介面(socket):更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊。

linux執行緒間通訊:互斥體(互斥量)、訊號量、條件變數。

windows程序間通訊:管道、共享記憶體、訊息佇列、訊號量、socket

windows執行緒間通訊:臨界區(critical section)、互斥量(mutex)、訊號量(訊號燈)(semaphore)、事件(event)

程序同步與通訊

程序通訊 訊號通訊 硬體 包括硬體異常,除零,越界訪問,這些訊號由核心產生,併發送到相關程序 軟體 某些軟體事件如alarm 函式產生sigalrm訊號,管道通訊產生sigpipe 程序使用kill raise 等函式。訊號的相應方式 忽略訊號,但是有兩個訊號不能忽略,sigkill sigstop...

程序同步與互斥

程序同步與互斥 首先,我們看乙個例子 程序p1 p2公用乙個變數count,初始值為0 p1 p2兩個程序的執行順序是隨機的,p1 p2可能順序執行或交錯執行。由圖可見,不同的執行順序,count值會不同,這是不允許的。在多道程式系統中,由於資源共享或程序合作,使程序間形成間接相互制約和直接相互制約...

程序同步與互斥

為什麼要引入程序同步的概念?多道程式環境下的程序併發執行,它們相互之間存在著不同的制約關係,為了理解和協調這種制約的關係,引入了程序同步的概念。臨界資源是一次只能為乙個程序使用的資源。由於臨界資源的特性,就決定了 對它的訪問必須是互斥的。在每個程序中,訪問臨界資源的那段 稱為臨界區。為了保證臨界資源...