#include "windows.h"
#include <iostream.h>
const MAX_THREAD_NUM = 64; //最大线程数
CRITICAL_SECTION hRead;
CRITICAL_SECTION hWrite;
int ReaderCount = 0;
DWORD WINAPI Reader(
LPVOID lpParameter //therad data
);
DWORD WINAPI Writer(
LPVOID lpParameter //therad data
);
void main ()
{
HANDLE ReaderThread[MAX_THREAD_NUM];
HANDLE WriterThread[MAX_THREAD_NUM];
for (int i=0; i<5; i++)
{
ReaderThread[i] = CreateThread (NULL, 0, Reader, NULL, 0, NULL);
CloseHandle(ReaderThread[i]);
}
for (int j=0; j<3; j++)
{
WriterThread[j] = CreateThread (NULL, 0, Writer, NULL, 0, NULL);
CloseHandle(WriterThread[i]);
}
InitializeCriticalSection (&hRead);
InitializeCriticalSection (&hWrite);
Sleep(4000);
DeleteCriticalSection (&hRead);
DeleteCriticalSection (&hWrite);
}
DWORD WINAPI Reader (LPVOID lpParameter)
{
EnterCriticalSection (&hRead);
if (ReaderCount == 0)
EnterCriticalSection (&hWrite);
ReaderCount = ReaderCount + 1;
LeaveCriticalSection (&hRead);
cout<<"Reader is reading!"<<endl;
Sleep (10);
cout<<"Reader finish reading!"<<endl;
EnterCriticalSection (&hRead);
ReaderCount = ReaderCount - 1;
if (ReaderCount == 0)
LeaveCriticalSection (&hWrite);
LeaveCriticalSection (&hRead);
return 0;
}
DWORD WINAPI Writer (LPVOID lpParameter)
{
EnterCriticalSection (&hWrite);
cout<<"Writer is writing!"<<endl;
LeaveCriticalSection (&hWrite);
return 0;
}
评论0