多线程基础技术
Win32 多線程技術(shù)主要包括線程的創(chuàng)建、互斥去的建立、終止線程,對(duì)于同一進(jìn)程的多個(gè)線程在
共享資源時(shí)需要解決同步問(wèn)題,這主要包括:互斥、信號(hào)量、API等待函數(shù)等。下面簡(jiǎn)單的介紹這幾類技術(shù):
1. 其中API等待函數(shù)提供了阻塞線程自身的調(diào)用,常見(jiàn)的有 DWORD WaitForSingleObject(HANDLE hHandle, DWORD, mm),單線程等待。
DWORD WaitForMultipleObject(DWORD nCount ,CONST HANDLE *lpHandles, BOOL bWaitAll,DWORD dwMilliseconds);,多等待對(duì)象。
2. 建立互斥區(qū)(Mutex),通過(guò)建立互斥對(duì)象,不同線程可以在采用WaitForSingleObject將句柄傳遞給函數(shù)。
3. 信號(hào)量,通過(guò)信號(hào)計(jì)數(shù)器變量記錄當(dāng)前某線程的狀態(tài)是否是阻塞或者非阻塞態(tài),當(dāng)計(jì)數(shù)器數(shù)值為0時(shí),則代表此時(shí)限制其它線程使用資源,
當(dāng)ReleaseSemaphore?釋放信號(hào)量時(shí),其它線程可以繼續(xù)訪問(wèn)共享的資源。
3.1首先創(chuàng)建或者打開(kāi)HANDLE CreateSemaphore()或者HANDLE OpenSemaphore();
3.2在線程訪問(wèn)共享資源之前調(diào)用?WaitForSingleObject;
3.3 ReleaseSemaphore();
4. 事件對(duì)象,事件對(duì)象(Event)是最簡(jiǎn)單的同步對(duì)象,包括有信號(hào)和無(wú)信號(hào)兩種狀態(tài)。在線程訪問(wèn)某資源之前,需要等待某一事件的發(fā)生,這時(shí)用事件對(duì)象最合適。
例如:只有在通信端口緩區(qū)收到數(shù)據(jù)后,監(jiān)視線程才被激活。例如Socket的server的listen函數(shù)在_buff消息隊(duì)列未存入數(shù)據(jù)時(shí)。主要有三個(gè)函數(shù),CreateEvent()
ResetEvent?()以及OpenEvent。
5. 排斥區(qū)對(duì)象
VOID InitializeCriticalSection(LP
在排斥區(qū)中異步執(zhí)行時(shí),它只能在同一進(jìn)程的線程之間共享資源處理。雖然此時(shí)上面介紹的幾種方法均可使用,但是,使用排斥區(qū)的方法則使同步管理的效率更高。
ao.com/CRITICAL_SECTION);
轉(zhuǎn)載于:https://www.cnblogs.com/xiaofuzheng/archive/2012/08/23/2653392.html
總結(jié)
- 上一篇: 成为一个合格的as3程序猿
- 下一篇: 多线程相关