1. 程式人生 > >程序間互斥、程序間同步 & 訊息通訊機制的同步、非同步

程序間互斥、程序間同步 & 訊息通訊機制的同步、非同步

程序的互斥、同步:

互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。   同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源

程序的狀態是基於一定的原因和條件而變化的而這些原因和條件又常常是因為程序間的相互制約關係而引起的系統中程序會有這種關係主要是由於程序對資源的共享性由於這種共享的特徵使系統中原來沒有邏輯關係的程序因為互相競爭資源而發生了制約關係這種關係的基本形式

"程序-資源-程序"這是程序間通過資源而發生的一種間接關係由於系統對程序所請求的許多資源常常是互斥滿足的所以這咱關係表現為互斥關係

又由於系統中為了完成同一個任務而建立若干程序它們之間必然是夥伴程序如作業的一組並行程序共同完成一項任務有時它們要在某點上互相等待或互通訊息這種關係的基本形式是"程序-程序"這是程序之間的一種直接關係表現了程序之間的協同工作的特性稱為程序間的同步關係例如:現在AB兩個程序A程序負責輸入資料並送入緩衝區中B程序必須負責加工緩衝區中的資料並輸出為了保證這兩個程序之間能夠協同工作B程序必須等待A程序發來緩衝區已滿的訊號後才開始工作A程序必須等待B程序發來緩衝區中的

資料加工並輸出後才能再輸入下一批資料這體現了程序之間的的同步關係又由於這兩個程序共用同一個緩衝區因此它們對緩衝區的操作還應該作到互斥

訊息通訊機制的同步、非同步:

所謂同步,就是在發出一個*呼叫*時,在沒有得到結果之前,該*呼叫*就不返回。但是一旦呼叫返回,就得到返回值了。換句話說,就是由*呼叫者*主動等待這個*呼叫*的結果。

而非同步則是相反,*呼叫*在發出之後,這個呼叫就直接返回了,所以沒有返回結果。換句話說,當一個非同步過程呼叫發出後,呼叫者不會立刻得到結果。而是在*呼叫*發出後,*被呼叫者*通過狀態、通知來通知呼叫者,或通過回撥函式處理這個呼叫。

舉個通俗的例子:你打電話問書店老闆有沒有《分散式系統》這本書,如果是同步通訊機制,書店老闆會說,你稍等,

”我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(返回結果)。而非同步通訊機制,書店老闆直接告訴你我查一下啊,查好了打電話給你,然後直接掛電話了(不返回結果)。然後查好了,他會主動打電話給你。在這裡老闆通過“回電”這種方式來回調。

http://m.blog.csdn.net/Alvin_CSDN_blog/article/details/64124077點選開啟連結

https://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B%E5%90%8C%E6%AD%A5/4855164?fr=aladdin點選開啟連結

https://www.cnblogs.com/kubixuesheng/p/4355786.html點選開啟連結