第九章 线程与内核对象的同步(4)

 

四、信标内核对象

信标内核对象用于资源进行计数。包含:引用计数、最大资源数量(用于标识信标能够控制的资源的最大数量)、当期资源数量(用于标识当前可以使用的资源的数量)。

信标的使用规则:当前资源数量大于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 lReleaseCountPLONG plPreviousCount)

信标的测试和设置操作是按原子方式进行的。当向信标申请一个资源时,操作系统检查是否有这个资源可供使用,同时将可用资源的数量递减(不让另一个线程干扰)。只有当资源数量递减后,系统才允许另一个线程申请对资源的访问权。如果该等待函数确定信标的当前资源数量是0(信标没有发出通知信号) 系统就让调用函数进入等待状态。当另一个线程将对信标的当前资源数量进行递增时,系统会记住该等待线程(或多个线程) ,并允许它变为可调度状态(相应地递减它的当前资源数量)。

你可能感兴趣的:(线程)