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

📄 res.h

📁 操作系统中的经典问题:银行家算法
💻 H
字号:
//把需求队列放入需求矩阵,并且把已分配队列置空后放入已分配矩阵void add_thread_res( vector<int>& needed){	//将已经分配的部分置为空	g_already.push_back(empty);	g_needed.push_back(needed);}//测试进程是否能够执行,即当前状态是否安全int allow(){	vector<int> work(g_free);//能够支持运行的资源	vector<int> finish;//每个线程是否能够结束的标志,如果可以结束,则该线程的所有资源都是可以支持运行的	for (unsigned int i=0; i < g_already.size(); i++)		finish.push_back(0);	int fin = 1;//是否有线程可以结束的标志	while (fin)	{		fin = 0;		int i = 0;		list< vector<int> >::iterator g_needed_tmp_ptr = g_needed.begin();		list< vector<int> >::iterator g_already_tmp_ptr = g_already.begin();		for (;g_needed_tmp_ptr != g_needed.end(); g_needed_tmp_ptr++, g_already_tmp_ptr++, i++)		{			if (finish[i] != 1)//如果该线程还没有结束,判断是否可以结束			{				//debug				//cout << i << "没有结束" << endl;				//debug				int small = 1;				for (int j=0; j < g_res_size; j++)				{					//debug					//cout << j << "\t" << (*g_needed_tmp_ptr)[j] << "\t" << work[j] << endl;					//debug					if ( (*g_needed_tmp_ptr)[j] > work[j] )					{						small = 0;						break;					}				}				if (small)//如果可以结束				{				//debug				//cout << i << "可以结束" << endl;				//debug					fin = 1;//需要重新进行循环					finish[i] = 1;//置可以结束标志为1					//把已经分配的资源添加到可以执行运行的资源中去					for (int j=0; j<g_res_size; j++)					{						work[j] += (*g_already_tmp_ptr)[j];					}				}			}		}	}	for (unsigned int i=0; i < g_already.size(); i++)	{		if (finish[i] != 1)			return 0;	}	return 1;}//当前线程申请资源int request_res(int res_id){	if (res_id >= g_res_size)		return -1;	(*g_already_ptr)[res_id]++;	(*g_needed_ptr)[res_id]--;	g_allot[res_id]++;	g_free[res_id]--;	if (allow())		return 1;	(*g_already_ptr)[res_id]--;	(*g_needed_ptr)[res_id]++;	g_allot[res_id]--;	g_free[res_id]++;	return 0;}//释放当前线程中的资源int free_res(int res_id){	if (res_id < g_res_size)	{		(*g_already_ptr)[res_id]--;		g_allot[res_id]--;		g_free[res_id]++;		return 1;	}	return 0;}//释放当前线程的所有资源void free_all_res(){	for (int i=0; i < g_res_size; i++)	{		*(g_allot.begin()+i) -= (*g_already_ptr)[i];		*(g_free.begin()+i) += (*g_already_ptr)[i];	}}

⌨️ 快捷键说明

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