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; }
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; }