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

📄 bank02.cpp

📁 一种解银行家算法的全新的思路
💻 CPP
字号:
#include "bank02.h"
#include "time.h"
#include "iostream.h"

int main()
{
	HANDLE hThread[N];
//	hMutex[M]==CreateMutex(NULL, TRUE, NULL);
	srand((unsigned)time (NULL));
	{for(int i = 0; i < M; i++)
	{
		r[i] = (rand() % Z) + 1;
		hMutex[M]=CreateMutex(NULL, TRUE, NULL);
		for (DWORD j = 0; j < r[i]; j++)
		{
			ReleaseMutex(hMutex[i]);
		}
		cout<<r[i];
	}
	cout<<endl;}

	for(int i = 0; i < N; i++)
	{
		hThread[i]=CreateThread(NULL, 0, FunBank, id, 0, NULL);
	}
	sem=CreateMutex(NULL, FALSE, NULL);
	Sleep(N*30+3000);
	
	return 0;
}


DWORD WINAPI FunBank(LPVOID lpParameter)
{
	DWORD max[M], used[M];		//最大需求资源,已分配资源
	BOOL ok = TRUE;		//需求状态标识
	DWORD ThreadId = GetCurrentThreadId();

	{cout<<ThreadId<<":";
	for(int i = 0; i < M; i++)
	{
		max[i] = (rand() % Z) + 1;
		used[i] = Z;
		while (used[i] >= max[i])
		{
			used[i] = rand() % Z;
		}
		cout<<max[i]<<" ";
		cout<<"("<<used[i]<<") ";
	}
	cout<<endl;}

	Sleep(10);
	BOOL tem = TRUE;
	while(tem)
	{
	WaitForSingleObject(sem, INFINITE);
	int result = TRUE;
	{for(int i = 0; i < M; i++)
	{
		if (r[i] < (max[i] - used[i]))
		{
			result = FALSE;
		}
	}}
	if (result)
	{
		for(int i = 0; i < M; i++)
		{
			for(DWORD j = 0; j < max[i] - used[i]; j++)
			{
				WaitForSingleObject(hMutex[i], INFINITE);
			}
		}
		tem = FALSE;
	}
	ReleaseMutex(sem);
	Sleep(10);
	}
	
	cout<<ThreadId<<">";

	{WaitForSingleObject(sem, INFINITE);
	for(int i = 0; i < M; i++)
	{
		for(DWORD j = 0; j < max[i]; j++)
		{
			ReleaseMutex(hMutex[i]);
		}
	}
	ReleaseMutex(sem);}
	Sleep(10);

	return 0;
}

⌨️ 快捷键说明

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