⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 read_writer.cpp

📁 操作系统读者写者问题
💻 CPP
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -