资源说明:图书馆登记和注销
要求:有一阅览室,读者进入时必须先在一张登记表上登记。该表中每个表项代表阅览室中的一个座位。读者离开时要消掉其登记信息。阅览室共有50 个座位。登记表每次仅允许一位读者进行登记或注销。
本实验由两个进程组成,分别是登陆和注销进程
使用到的函数和信号量
HANDLE mutex;
HANDLE empty;
HANDLE full;
创建信号量
HANDLE CreateSemaphore(
__in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,// lpSemaphoreAttributes是信号量的安全属性 可为NULL
__in LONG lInitialCount,// lInitialCount是初始化的信号量
__in LONG lMaximumCount,// lMaximumCount是允许信号量增加到最大值
__in_opt LPCWSTR lpName//lpName是信号量的名称 可为NULL
);
创建互斥信号量
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针 可为NULL
BOOL bInitialOwner, // 初始化互斥对象的所有者
LPCTSTR lpName // 指向互斥对象名的指针
);
申请一个资源
WaitForSingleObject(HANDLE full,INFINITE);
释放资源
ReleaseSemaphore(
__in HANDLE hSemaphore,// hSemaphore是要增加的信号量句柄
__in LONG lReleaseCount,// lReleaseCount是增加的计数。
__out_opt LPLONG lpPreviousCount//lpPreviousCount是增加前的数值返回。
);
释放互斥信号量
BOOL ReleaseMutex(HANDLE hMutex);
DWORD WaitForMultipleObjects(
DWORD nCount, // number of handles in array
CONST HANDLE *lpHandles, // object-handle array
BOOL bWaitAll, // wait option
DWORD dwMilliseconds // time-out interval
);
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。