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