#include <Windows.h>
#include <stdio.h>
#include "RWLock.h"
IRWLock * gRWLock;
LONG RI = 0;
LONG WI = 0;
DWORD WINAPI gReader(LPVOID lpParam)
{
for (int i=0; i<100000; i++)
{
if (gRWLock->ReadLock(10) == WAIT_OBJECT_0)
{
InterlockedIncrement(&RI);
gRWLock->ReadUnlock();
}
else
{
i --;
}
}
return 0;
}
DWORD WINAPI gWriter(LPVOID lpParam)
{
for (int i=0; i<100000; i++)
{
if (gRWLock->WriteLock(10) == WAIT_OBJECT_0)
{
InterlockedIncrement(&WI);
gRWLock->WriteUnlock();
}
else
{
i --;
}
}
return 0;
}
#define READ_COUNT 4
#define WRITE_COUNT 1
int main()
{
HANDLE hThread[READ_COUNT+WRITE_COUNT];
gRWLock = new CRwLockWithInterlocked();
DWORD sysTick = GetTickCount();
for (int i=0; i<READ_COUNT; i++)
{
hThread[i] = CreateThread(NULL, 0, gReader, (LPVOID)i, 0, NULL);
}
for (int i=0; i<WRITE_COUNT; i++)
{
hThread[i+READ_COUNT] = CreateThread(NULL, 0, gWriter, (LPVOID)i, 0, NULL);
}
WaitForMultipleObjects(READ_COUNT+WRITE_COUNT, hThread, TRUE, INFINITE);
printf("%dms elapse. RI=%d, WI=%d.\n", GetTickCount() - sysTick, RI, WI);
return 0;
}
Windows下实现的读写锁(VS2008环境)
需积分: 50 78 浏览量
2010-10-11
00:47:11
上传
评论
收藏 10KB RAR 举报
zxfishhack
- 粉丝: 2
- 资源: 2