linux程序同步-概述
程序間通訊(ipc)方法主要有以下幾種:
管道/fifo/共享記憶體/訊息佇列/訊號量
1.管道中還有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fifo,管道是先進先出的通訊方式
2.訊息佇列是用於兩個程序之間的通訊,首先在乙個程序中建立乙個訊息佇列,然後再往訊息佇列中寫資料,而另乙個程序則從那個訊息佇列中取數 據。需要注意的是,訊息佇列是用建立檔案的方式建立的,如果乙個程序向某個訊息佇列中寫入了資料之後,另乙個程序並沒有取出資料,即使向訊息佇列中寫資料 的程序已經結束,儲存在訊息佇列中的資料並沒有消失,也就是說下次再從這個訊息佇列讀資料的時候,就是上次的資料!!!!
3.訊號量,它與windows下的訊號量是一樣的,所以就不用多說了
4.共享記憶體,類似於windows下的dll中的共享變數,但linux下的共享記憶體區不需要像dll這樣的東西,只要首先建立乙個共享記憶體區,其它程序按照一定的步驟就能訪問到這個共享記憶體區中的資料,當然可讀可寫
以上幾種方式的比較:
1.管道:速度慢,容量有限,只有父子程序能通訊
2.fifo:任何程序間都能通訊,但速度慢
3.訊息佇列:容量受到系統限制,且要注意第一次讀的時候,要考慮上一次沒有讀完資料的問題
4.訊號量:不能傳遞復雜訊息,只能用來同步
5.共享記憶體區:能夠很容易控制容量,速度快,但要保持同步,比如乙個程序在寫的時候,另乙個程序要注意讀寫的問題,相當於執行緒中的執行緒安全,當然,共享記憶體區同樣可以用作執行緒間通訊,不過沒這個必要,執行緒間本來就已經共享了同一程序內的一塊記憶體
程序同步(一) 程序同步相關概念
在os中引入程序後,雖然提高了資源的利用率和系統吞吐量,但是由於程序的非同步性將會給系統造成混亂,尤其是他們在爭搶臨界資源時。當多個程序去爭用共享變數 鍊錶時,可能導致資料處理出錯。程序同步的任務就是對多個相關程序在執行次序上進行協調,使得併發執行的程序之間能有效地共享資源和相互合作,從而使程式的執...
程序同步問題
有讀者和寫者兩組併發程序,共享乙個檔案,當兩個或以上的讀程序同時訪問共享資料時不會產生 但若某個寫程序和其他程序 讀程序或寫程序 同時訪問共享資料時則可能導致資料不一致的錯誤。因此要求 允許多個讀者可以同時對檔案執行讀操作 只允許乙個寫者往檔案中寫資訊 任一寫者在完成寫操作之前不允許其他讀者或寫者工...
程序同步控制
生產者 消費者問題描述的是 有一群生產者程序在生產產品,並將這些產品提供給消費者程序去消費。為使生產者程序與消費者程序能夠併發執行,在兩者之間設定了乙個具有n個緩衝區的緩衝池,生產者程序將它所生產的產品放入乙個緩衝區中 消費者程序可以從乙個緩衝區中取走產品去消費。儘管所有的生產者和消費者程序都是以非...