注:调用 My WaitForSingleObject()会做出锁定操作,,调用ReleaseMutex()或RelaeseSemaphore()则会做出解除锁定的操作。
BOOL AcquireReadLock(RWLock *pLock){BOOL result = TRUE;if (!MyWaitForSingleObject(pLock->hMutex))return FALSE;if (++pLock->nReaderCount == 1)result = MyWaitForSingleObject(pLock->hDataLock);ReleaseMutex(pLock->hMutex);return result;}BOOL ReleaseReadLock(RWLock * pLock){int result;LONG lPrevCount;if (!MyWaitForSingleObject(pLock->hMutex))return FALSE;if (–pLock->nReaderCount == 0){result = ReleaseSemapore(pLock->hDataLock, 1, &lPrevCount);}ReleaseMutex(pLock->hMutex);return result;}BOOL AcquireWriteLock(RWLock *pLock){return MyWaitForSingleObject(pLock->hDataLock);}BOOL ReleaseWriteLock(RWLock *pLock){int result;LONG lPrevCount;result = ReleaseSemaphore(pLock->hDataLock, 1, &PrevCount);if (lPrevCount != 0)FatalError("ReleaseWriteLock – Semaphore was not locked!");return result;}
锁定数据的时机:
版权声明:本文为博主原创文章,未经博主允许不得转载。
呼唤你前往另一个地方,过上另一种生活。