信号量内核对象主要包括三个部分:使用计数,最大资源计数,当前资源计数。
- 使用计数:和其他内核对象一样,用来标识使用该事件对象的不同线程个数;
- 最大资源计数:表示信号量控制的最大资源的数目;
- 当前资源计数:表示信号量当前可用的资源数目;
信号量使用规则如下:
- 如果当前资源计数大于0,信号量处于触发状态;
- 如果当前资源计数等于0,那么信号量处于未触发状态;
- 系统绝不会使当前资源计数变为负数;
- 系统绝对不会使当前资源计数超过最大资源计数;
在使用信号量对象时,不要把信号量对象使用计数和当前资源计数混为一谈;
下面是使用信号量内核对象的所要使用的函数接口:
(1)CreateSemaphore()
HANDLE WINAPI CreateSemaphore(
_In_opt_ LPSECURITY_ATTRIBUTES lpEventAttributes,
_In_ LONG lInitialCount,
_In_ LONG lMa

本文介绍了Windows系统中信号量内核对象的使用,包括CreateSemaphore()、OpenSemaphore()、WaitForSingleObject()、ReleaseSemaphore()和CloseHandle()等函数。信号量用于控制多线程对资源的访问,确保资源计数不超过最大值,避免资源竞争。通过信号量,线程可以等待资源可用并原子地更新资源计数。
最低0.47元/天 解锁文章
8550





