3、 访问共享资源后,则放弃临界区对象,g_CriticalSection.Unlock();
1、
1234CEvent(
BOOL
bInitiallyOwn=FALSE,
BOOL
bManualReset=FALSE,
LPCTSTR
lpszName=NULL,
LPSECURITY_ATTRIBUTES lpsaAttribute=NULL);
2、BOOL CEvent::SetEvent();
3、BOOL CEvent::ResetEvent();
1
2
3
4
5
6
|
CSemaphore(
LONG
lInitialCount = 1,
LONG
lMaxCount = 1,
LPCTSTR
pstrName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttributes = NULL
);
|
一般是将当前可用资源计数设置为最大资源计数,每增加一个线程对共享资源的访问,当前可用资源计数就减1,只要当前可用资源计数大于0,就可以发出信号量信号。如果为0,则放入一个队列中等待。线程在处理完共享资源后,应在离开的同时通过ReleaseSemaphore()函数将当前可用资源数加1。
1
2
3
|
BOOL
ReleaseSemaphore(
HANDLE
hSemaphore,
// hSemaphore:信号量句柄
LONG
lReleaseCount,
// lReleaseCount:信号量计数值
LPLONG
lpPreviousCount
// 参数一般为NULL);
|