Пример #1
0
unsigned int System::attainResource(Process *process)
{
	wait();

	int rtn = 0;
	unsigned int requestNum = process->getRequestNeed();
	unsigned int available_bk = getAvailable();
	unsigned int ownNeed_bk = process->getOwnNeed();
	std::string prompt;

	if(requestNum <= getAvailable())
	{
		setAvailable(getAvailable() - requestNum);
		process->setOwnNeed(process->getOwnNeed() + requestNum);

		prompt = prompt +  "\nsystem" + "\t" + std::to_string(available_bk) + '\n';
		std::cout << prompt;

		prompt.clear();

		if(banker(process))
		{
			processList.insert(process);

			prompt = prompt +  "Thread" + "\t" + std::to_string(process->getUid())  + "\t" + std::to_string(process->getMaxNeed()) + "\t" 
			 	+ std::to_string(process->getOwnNeed()) + "\t" + std::to_string(process->getRequestNeed()) + "\t" + "Success\n";
			std::cout << prompt;
			rtn = 0;
		}
		else
		{
			setAvailable(available_bk);
			process->setOwnNeed(ownNeed_bk);

			prompt = prompt +  "Thread" + "\t" + std::to_string(process->getUid())  + "\t" + std::to_string(process->getMaxNeed()) + "\t" 
			 	+ std::to_string(process->getOwnNeed()) + "\t" + std::to_string(process->getRequestNeed()) + "\t" + "Failure\n";
			std::cout << prompt;

			rtn = 1;
		}
		printProcessList(std::cout);
	}
	else
	{
		rtn = 1;
	}

	release();
	return rtn;
}
Пример #2
0
int main()
{
    init();
    while(1)
    {
        char ch;
        printf("先检查初始状态是否安全:\n");
        if(security())
        {
            printf("当前处于安全状态:\n");
            printf("安全序列是{P%d,P%d,P%d,P%d,P%d}。\n",safeseq[0],safeseq[1],safeseq[2],safeseq[3],safeseq[4]);
        }
        else
        {
            printf("系统处于不安全状态。程序将退出...\n");
            break;
        }
        do
        {
            int process;
            Resource res;
            PrintTable();
            printf("请依次输入请求分配的进程和对三类资源的请求数量:");
            scanf("%d%d%d%d",&process,&res.A,&res.B,&res.C);
            if(banker(process,&res))
            {
                printf("分配成功。\n");
                printf("安全序列是{P%d,P%d,P%d,P%d,P%d}。\n",safeseq[0],safeseq[1],safeseq[2],safeseq[3],safeseq[4]);
            }
            else
            {
                printf("分配失败。\n");
            }
            printf("是否继续分配?(Y/N):");
            fflush(stdin);
            ch=getchar();
        }
        while(ch=='y' || ch=='Y');
    }
    return 0;
}