ReleaseSemaphore函数将指定信号量对象的计数增加指定量。
BOOL ReleaseSemaphore(
HANDLE 【// handle of the semaphore object】, | //信号量对象的句柄 |
LONG 【lReleaseCount】, | //量加到当前计数 |
LPLONG 【lpPreviousCount】 | //以前的计数地址 |
); |
参数
【// handle of the semaphore object】
标识信号量对象。CreateSemaphore或OpenSemaphore函数返回此句柄。
Windows NT:此句柄必须具有SEMAPHORE_MODIFY_STATE访问权限。有关详细信息,请参阅进程间同步对象.
【lReleaseCount】
指定要增加信号量对象当前计数的量。该值必须大于零。如果指定的数量会导致信号量的计数超过创建信号量时指定的最大计数,则计数不会更改,函数返回FALSE。
【lpPreviousCount】
指向32位变量以接收信号量的先前计数。如果不需要先前的计数,则此参数可以为NULL。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
备注
信号量对象的状态在其计数大于零时发出信号,并且当其计数等于零时,信号量对象的状态为非信号。调用CreateSemaphore函数的过程指定信号量的初始计数。由于信号量的信号状态,每次等待线程被释放时,信号量的计数减少一个。
通常,应用程序使用信号量来限制使用资源的线程数。在线程使用资源之前,它会在调用等待功能之一时指定信号量句柄。当wait函数返回时,它将信号量的计数减1。线程完成使用资源后,调用ReleaseSemaphore将信号量的计数增加1。
ReleaseSemaphore的另一个用途是在应用程序的初始化过程中。应用程序可以创建初始计数为零的信号量。这将信号量的状态设置为非信号状态,并阻止所有线程访问受保护的资源。当应用程序完成初始化时,它使用ReleaseSemaphore将计数增加到其最大值,以允许正常访问受保护的资源。
也可以看看