1. 程式人生 > >多進程間通信方式和多線程同步機制總結

多進程間通信方式和多線程同步機制總結

post msd 阻塞 ng- div 文件映射 管理 線程 -m

多進程之間通信方式:

文件映射:本地之間

共享內存:本地之間

匿名管道:本地之間

命名管道:跨服務器

郵件槽:一對多的傳輸數據,通常通過網絡向一臺Windows機器傳輸

剪切板:本地之間

socket:跨服務器

多線程之間通信方式:

全局變量

自定義消息響應

多線程之間同步機制:

臨界區:不可以跨進程,忘記解鎖會無限等待,要麽存在要麽沒有,多線程訪問獨占性共享資源

互斥量:可以跨進程,忘記解鎖會自動釋放,要麽存在要麽沒有

事件:又叫線程觸發器,不可以跨進程,要麽存在要麽沒有,一個線程來喚醒另一個線程(包括自動和人工兩種方式)

信號量:可以跨進程,始終代表可用資源數量,當資源數為o時,線程阻塞,允許多個線程同時訪問一個共享資源

多線程程序:

多線程程序是並發執行,對於多線程的共用資源不能保證能被正確利用即不保證能被獨占,並發執行的時候,哪個線程得到運行的機會是隨機的也是不可預期。為了解決

多線程中某個線程對資源的獨占(也就是多線程同步問題),只允許一個線程擁有共享資源的獨占。即多線程之間的同步機制。

線程:

線程包括兩個方面:第一:線程內核對象(OS用來存放統計信息的地方);第二:線程堆棧(函數參數和局部變量)

線程在它的進程的地址空間執行代碼。內核對象句柄依賴於進程而存在。

創建線程函數後建議立刻關閉句柄closehandle();

Windows API中提供了建立新的線程的函數CreateThread:

MSDN中CreateThread原型:

HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, //線程安全屬性 DWORD dwStackSize, // 堆棧大小 LPTHREAD_START_ROUTINE lpStartAddress, // 線程函數
LPVOID lpParameter, //線程參數 DWORD dwCreationFlags, // 線程創建屬性 LPDWORD lpThreadId // 線程ID );

返回值:

在內核對象中分配一個線程標識/句柄,可供管理,由CreateThread返回

多進程間通信方式和多線程同步機制總結