四、信标内核对象
信标内核对象用于资源进行计数。包含:引用计数、最大资源数量(用于标识信标能够控制的资源的最大数量)、当期资源数量(用于标识当前可以使用的资源的数量)。
信标的使用规则:当前资源数量大于0,则发出信标信号。0<=前资源数量<=最大资源数量
1、创建信标内核对象
HANDLE CreateSemaphore(PSECURITY_ATTRIBUTE psa, //安全属性
LONG lInitialCount, //资源初始值(即可供使用的资源数)
LONG lMaximumCount, //最大资源数量
PCTSTR pszName) //命名
2、其它线程打开现有信标
HANDLE OpenSemaphore(DWORD fdwAccess, BOOL bInheritHandle, PCTSTR pszName)
对信标的当前资源数量进行递增:
BOOL ReleaseSemaphore(HANDLE hsem, LONG lReleaseCount,PLONG plPreviousCount)
信标的测试和设置操作是按原子方式进行的。当向信标申请一个资源时,操作系统检查是否有这个资源可供使用,同时将可用资源的数量递减(不让另一个线程干扰)。只有当资源数量递减后,系统才允许另一个线程申请对资源的访问权。如果该等待函数确定信标的当前资源数量是0(信标没有发出通知信号) 系统就让调用函数进入等待状态。当另一个线程将对信标的当前资源数量进行递增时,系统会记住该等待线程(或多个线程) ,并允许它变为可调度状态(相应地递减它的当前资源数量)。