1. 程式人生 > >執行緒間的通訊、同步方式與程序間通訊方式

執行緒間的通訊、同步方式與程序間通訊方式

1、執行緒間的通訊方式
  • 使用全域性變數
    主要由於多個執行緒可能更改全域性變數,因此全域性變數最好宣告為violate
  • 使用訊息實現通訊
    在Windows程式設計中,每一個執行緒都可以擁有自己的訊息佇列(UI執行緒預設自帶訊息佇列和訊息迴圈,工作執行緒需要手動實現訊息迴圈),因此可以採用訊息進行執行緒間通訊sendMessage,postMessage。
    1)定義訊息#define WM_THREAD_SENDMSG=WM_USER+20;  
    2)新增訊息函式宣告afx_msg int OnTSendmsg(); 
    3)新增訊息對映ON_MESSAGE(WM_THREAD_SENDMSG,OnTSM) 
    4
    )新增OnTSM()的實現函式; 5)線上程函式中新增PostMessage訊息Post函式
  • 使用事件CEvent類實現執行緒間通訊
    Event物件有兩種狀態:有訊號和無訊號,執行緒可以監視處於有訊號狀態的事件,以便在適當的時候執行對事件的操作。
    1)建立一個CEvent類的物件:CEvent threadStart;它預設處在未通訊狀態; 
    2)threadStart.SetEvent();使其處於通訊狀態; 
    3)呼叫WaitForSingleObject()來監視CEvent物件
2、執行緒間的同步方式

各個執行緒可以訪問程序中的公共變數,資源,所以使用多執行緒的過程中需要注意的問題是如何防止兩個或兩個以上的執行緒同時訪問同一個資料,以免破壞資料的完整性。資料之間的相互制約包括
1、直接制約關係,即一個執行緒的處理結果,為另一個執行緒的輸入,因此執行緒之間直接制約著,這種關係可以稱之為同步關係
2、間接制約關係,即兩個執行緒需要訪問同一資源,該資源在同一時刻只能被一個執行緒訪問,這種關係稱之為執行緒間對資源的互斥訪問,某種意義上說互斥是一種制約關係更小的同步

執行緒間的同步方式有四種

3、程序間通訊方式

程序間通訊又稱IPC(Inter-Process Communication),指多個程序之間相互通訊,交換資訊的方法。根據程序通訊時資訊量大小的不同,可以將程序通訊劃分為兩大型別:
1、低階通訊,控制資訊的通訊(主要用於程序之間的同步,互斥,終止和掛起等等控制資訊的傳遞)
2、高階通訊,大批資料資訊的通訊(主要用於程序間資料塊資料的交換和共享,常見的高階通訊有管道,訊息佇列,共享記憶體等).

4、好文推薦(reference)