【操作系统】 银行家算法-banker's algorithm

【银行家算法】

    银行家算法是迪杰斯特拉先生的又一创作,主要用于解决操作系统上的死锁问题。问题大概是,选择当前进程操作,能否保证之后,不会出现死锁问题。核心思想是,先检查当前进程的资源数是否能得到满足,可以的话,创建一个执行了当前进程的新状态,并用while循环去逐一寻找可被执行的进程,若最后所有进程都能被执行,则返回安全状态信息,并执行当前进程,反之则返回不安全信息,并阻塞该进程。


代码实现:

/*
   Authour: david_jett
   Time:2015/12/8 23:06
   Content:banker's algorithm
*/
#include 
#include 
#define m 3  //资源种类 
#define n 4 //进程数 
struct state
{
    int resource[m];
    int available[m];
    int claim[n][m];
    int alloc[n][m];
}P;
using namespace std;
int request[m];
//judge the current state according to banker's algorithm
bool is_Safe(state tmp,int x)
{
    bool status[n];
    int cnt=1,pos;
    memset(status,0,sizeof(status));
    status[x]=1;
    bool flag=0;
    while(1)
    {
       bool flag=0;
       for(int i=0;itmp.available[j])
                {
                    flag=0;
                    break;
                }
            }
            if(flag)
            {
                pos=i;
                status[i]=1;
                break;
            }
          }
       }
       if(flag)
       {
          cnt++;
          for(int i=0;iP.claim[x][i])
        return 1;
   //Suspend process
   for(int i=0;iP.available[i])
        return 2;
   //Define a newstate
   state tmp;
   for(int i=0;i


你可能感兴趣的:(操作系统)