信号量
信号量在WIN32系统中是核心对象,故其用法同其他同步机制类似,但可应用于多个线程同步运行,即同时有至多有限个线程同时工作,而线程上线数量取决于初始化时指定的最大值。
1.创建一个信号量
创建时初始值不要超过信号量最大限度。
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpAttributes,
LONG lInitialCount,
LONG lMaximumCount,
LPCTSTR lpName
);
***例子:HANDLE HS=CreateSemaphore(NULL,0,2,NULL);***//0:初值 2:最大值
2.获得信号量锁定
因为Semaphore是核心对象,所以可以用WaitForSIngleObject()获得锁定,但一次只能锁定一个。对单个 线程来说,其可以用Wait多次锁定,也可以用Release一次释放多个,但有一点,不要释放超过最大限度。
3.解除信号量锁定
程序获得信号量后应当在结束同步控制时将其释放掉。就像退出临界区一样。
解除信号量锁定时尽量一次释放一个,虽然一次可释放多个,但容易出现不可预料的情况,就像最下面的程序例子。
BOOL ReleaseSemaphore(
HANDLE hSemaphore,
LONG lReleaseCount,
LPLONG lpPreviousCount
);
例:ReleaseSemaphore(HS,1,NULL);
信号量程序实例