C语言实现 操作系统 银行家算法(2)

// 某进程申请资源的请求
int request(const int PCount, const int RCount, const int pId, const int *reqSource)
{
 int i=0;
 int *testAllocate = (int*)malloc(PCount*RCount*sizeof(int));  // 预存储尝试的分配情况

if (testAllocate != NULL)
 {
  memcpy(testAllocate, Allocation, PCount*RCount*sizeof(int));
 }
 else
 {
  return FALSE;
 }

// 进行资源预分配
 for (i=0; i<RCount; ++i)
 {
  if (reqSource[i] > Available[i])  // 申请的资源比剩余的资源还多!
  {
   return FALSE;
  }
  else
  {
   testAllocate[pId*RCount + i] += reqSource[i];
  }
 }

if (testStatus(PCount, RCount) == TRUE)    // 是一个安全状态
 {
  // 正式分配
  memcpy(Allocation, testAllocate, PCount*RCount*sizeof(int));
 
  free(testAllocate);
  return TRUE;
 }
 else
 {
  free(testAllocate);
  return FALSE;
 }

}
 
// 释放所有的内存空间
int destroy()
{
 if (Resource == NULL || Max == NULL || Need == NULL
  || Allocation == NULL || Available == NULL)
 {
  return FALSE;
 }
 else
 {
  free(Resource);
  Resource = NULL;
  free(Max);
  Max = NULL;
  free(Need);
  Need = NULL;
  free(Allocation);
  Allocation = NULL;
  free(Available);
  Available = NULL;

printf("Destroy\n");

return TRUE;
 }

}

int main()
{
 int p = 0;  // 进程数
 int r = 0;  // 资源分类数

int reqSource[3] = {0, 3, 4};

readData(&p, &r);

// test now status
 if (testStatus(p, r) == TRUE)
 {
  printf("Saft\n");
 }
 else
 {
  printf("nonSaft\n");
 }


 // for test  reqSource[3] = {0, 3, 4};
 if (request(p, r, 1, reqSource) == TRUE)
 {
  printf("Allocate\n");
 }
 else
 {
  printf("Non-Allocate\n");
 }
 

// 释放所有的内存空间
 destroy(); 


 return 0;
}


/*  in.txt

5 3  // 进程数  资源种类数
17 5 20  // 各类资源总数

// 最大需求量
5 5 9
5 3 6
4 0 11
4 2 5
4 2 4

// 已分配资源数
2 1 2
4 0 2
4 0 5
2 0 4
3 1 4

// 剩余的资源数
2 3 3   

*/

C++ 设计新思维》 下载见

C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码

读C++ Primer 之构造函数陷阱

读C++ Primer 之智能指针

读C++ Primer 之句柄类

将C语言梳理一下,分布在以下10个章节中:

Linux-C成长之路(一):Linux下C编程概要

Linux-C成长之路(二):基本数据类型

Linux-C成长之路(三):基本IO函数操作

Linux-C成长之路(四):运算符

Linux-C成长之路(五):控制流

Linux-C成长之路(六):函数要义

Linux-C成长之路(七):数组与指针

Linux-C成长之路(八):存储类,动态内存

Linux-C成长之路(九):复合数据类型

Linux-C成长之路(十):其他高级议题

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d0e9ec3dd2311e72d43aebf9de7efb5e.html