read_writer.cpp

来自「操作系统读者写者问题」· C++ 代码 · 共 73 行

CPP
73
字号
#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;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?