Algoritmo do banqueiro (implementação simples c ++)

A estrutura de dados do algoritmo do banqueiro

  • Vetor de recursos disponíveis Disponível
  • Matriz de demanda máxima Max
  • Matriz de alocação
  • Ainda preciso da matriz Necessidade

Algoritmo de banqueiro

Seja Requesti a quantidade de solicitação do processo Pi, se Requesti [j] = k, significa que o processo Pi precisa de K recursos do tipo Rj. Quando Pi envia uma solicitação de recurso, o sistema verifica de acordo com as etapas a seguir.

a) Se Requesti [j] <= Precisa [I, j], então vá para a etapa (b), caso contrário, é considerado um erro, pois o número de recursos de que necessita ultrapassou o máximo declarado por ele.

b) Se Requesi [j] <= Disponível [j], vá para a etapa (c); caso contrário, significa que não há recursos suficientes e Pi deve esperar.

c) O sistema tenta alocar recursos para o processo Pi e modifica os valores na seguinte estrutura de dados:

Disponível [j]: = Disponível [j] - Solicitação i [j];

Alocação [i, j]: = Alocação [i, j] + Solicitação i [j];

Necessidade [i, j]: = Necessidade [i, j] - Solicitação i [j];

d) O sistema executa o algoritmo de segurança para verificar se o sistema está em um estado seguro após esta alocação de recursos. Se for seguro, os recursos são oficialmente alocados para o processo Pi e a alocação de recursos foi concluída; caso contrário, a alocação de teste é invalidada, o estado de alocação de recursos original é restaurado e o processo Pi espera.

Algoritmo de segurança

(1) Configure dois vetores:

① Vetor de trabalho Trabalho, que representa a quantidade de vários recursos que o sistema pode fornecer para que o processo continue em execução. Contém m elementos. No início da execução do algoritmo de segurança, Trabalho: = Disponível.

② Concluir, ele disse se o sistema tem recursos suficientes alocados para o processo para fazê-lo funcionar até a conclusão. No início, faça Finish: = false; quando houver recursos suficientes alocados para o processo, deixe Finish [i]: = true.

(2) Encontre um processo que atenda às seguintes condições do conjunto de processos:

① Terminar [i]: = falso;

② Precisa [i, j] <= Trabalho [j]; Se encontrado, vá para a etapa (3), caso contrário, vá para a etapa (4).

(3) Quando o processo Pi obtém recursos, ele pode executar sem problemas até que seja concluído e liberar os recursos alocados para ele. Portanto, ele deve executar:

Trabalho [j]: = Trabalho [j] + Alocação [i, j];

Concluir [i]: = verdadeiro;

Vá para a etapa 2;

(4) Se o Término [i] = verdadeiro de todos os processos for satisfeito, significa que o sistema está em um estado seguro; caso contrário, o sistema está em um estado inseguro.

#include<bits/stdc++.h>
using namespace std;
#define maxsize 10

char Res[maxsize]={
    
    0};                  //资源名
int Available[maxsize]={
    
    0};             //可利用资源
int Max[maxsize][maxsize]={
    
    0};          //最大需求矩阵
int Allocation[maxsize][maxsize]={
    
    0};   //已分配矩阵
int Need[maxsize][maxsize]={
    
    0};         //需求矩阵

int Work;                               //资源数

bool Finish[maxsize]={
    
    false};           

int main(){
    
    
    cout<<"请按顺序输入:资源种类,数目(q to quit)(max<=10)"<<endl;
    char ch;
    int Resnum=0;
    while(cin>>ch&&ch!='q'){
    
    
        Res[Resnum]=ch;
        cin>>Available[Resnum++];
    }
    cout<<"当前资源目录:"<<endl;
    cout<<"资源类型     资源数目"<<endl;
    for(int i=0;i<Resnum;++i){
    
    
        cout<<"   "<<Res[i]<<"            "<<Available[i]<<endl;
        Work+=Available[i];
    }
    int n;
    cout<<"请输入进程个数(max<=10)"<<endl;
    cin>>n;
    for(int i=0;i<n;++i){
    
    
        cout<<"请按顺序输入第"<<i+1<<"个进程所需的资源类型、资源数目";
        int ch1;
        int num;
        cin>>ch1>>num;
        Need[i][ch1]=num;
        if(Need[i][ch1]<=Available[ch1-1]){
    
               //Need[i][ch1]表示第i个进程所需ch1资源的个数
            Available[ch1-1]-=Need[i][ch1];
            Finish[i]=true;
        }
    }
    int flag=0;
    for(int i=0;i<n;++i){
    
    
        if(!Finish[i])
            flag=1;
    }
    if(flag)
        cout<<"不安全";
    else
        cout<<"安全";


}

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/qq_43477024/article/details/110249084
Recomendado
Clasificación