linux程序間的同步方法

2021-06-17 19:14:30 字數 780 閱讀 4900

程序間通訊(ipc)方法主要有以下幾種:   

管道/fifo/共享記憶體/訊息佇列/訊號  

1.管道中還有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fifo,管道是先進先出的通訊方式    

2.訊息佇列是用於兩個程序之間的通訊,首先在乙個程序中建立乙個訊息佇列,然後再往訊息佇列中寫資料,而另乙個程序則從那個訊息佇列中取資料。需要注意的是,訊息佇列是用建立檔案的方式建立的,如果乙個程序向某個訊息佇列中寫入了資料之後,另乙個程序並沒有取出資料,即使向訊息佇列中寫資料的程序已經結束,儲存在訊息佇列中的資料並沒有消失,也就是說下次再從這個訊息佇列讀資料的時候,就是上次的資料!!!!    

3.訊號量,它與windows下的訊號量是一樣的,所以就不用多說了    

4.共享記憶體,類似於windows下的dll中的共享變數,但linux下的共享記憶體區不需要像dll這樣的東西,只要首先建立乙個共享記憶體區,其它程序按照一定的步驟就能訪問到這個共享記憶體區中的資料,當然可讀可寫      

以上幾種方式的比較:    

1.管道:速度慢,容量有限,只有父子程序能通訊    

2.fifo:任何程序間都能通訊,但速度慢    

4.訊號量:不能傳遞復雜訊息,只能用來同步    

5.共享記憶體區:能夠很容易控制容量,速度快,但要保持同步,比如乙個程序在寫的時候,另乙個程序要注意讀寫的問題,相當於執行緒中的執行緒安全,當然,共享記憶體區同樣可以用作執行緒間通訊,不過沒這個必要,執行緒間本來就已經共享了同一程序內的一塊記憶體

程序間同步的方法

2010 05 10 01 03 42 分類 linux 字型大小 訂閱 程序間通訊 ipc 方法主要有以下幾種 管道 fifo 共享記憶體 訊息佇列 訊號 1.管道中還有命名管道和非命名管道 即匿名管道 之分,非命名管道 即匿名管道 只能用於父子程序通訊,命名管道可用於非父子程序,命名管道就是fi...

linux 程序間同步

程序間也可以使用互斥鎖,來達到同步的目的。但應在pthread mutex init初始化之前,修改其屬性為程序間共享。mutex的屬性修改函式主要有以下幾個。pthread mutexattr t型別 用於定義mutex鎖的屬性 pthread mutexattr init函式 初始化乙個mute...

程序間的同步

為什麼需要程序間同步 通訊 資料傳輸 程序間資料傳輸 資源共享 程序間資源共享 通知事件 程序間相互傳遞訊息 程序控制 有些程序希望完全控制另乙個程序的執行 如debug程序 此時控制程序希望能夠攔截另乙個程序的所有陷入和異常,並能夠及時知道它的狀態改變。程序間的同步原則 空閒讓進 資源無占用,允許...