多线程基础技术
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);