// 某进程申请资源的请求
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++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码
将C语言梳理一下,分布在以下10个章节中:
Linux-C成长之路(十):其他高级议题