操作系统 死锁的检测

发布时间:2011-05-16 20:31:49   来源:文档文库   
字号:

#include

using namespace std;

#define MAXN 100

int used[MAXN], cnt, n, m;

int work[MAXN], allocation[MAXN][MAXN], request[MAXN][MAXN];

int dfs(int np) {

int i, j;

if (cnt == 0) return 1;

for (i = 0; i < n; i++) {

if (!used[i]) {

for (j = 0; j < m; j++) {

if (request[i][j] > work[j]) {

break;

}

}

}

}

if (j == m) {

for (j = 0; j < m; j++) {

work[j] += allocation[i][j];

used[i] = 1;

cnt--;

if (dfs(i)) {

return 1;

}

cnt++;

used[i] = 0;

work[j] -= allocation[i][j];

}

}

return 0;

}

int main() {

int i, j, k, l;

puts("资源总数:");

scanf("%d", &m);

puts("进程总数:");

scanf("%d", &n);

for (i = 0; i < m; i++) {

printf("%d个资源剩余数量:", i + 1);

scanf("%d", &work[i]);

}

for (i = 0; i < n; i++) {

for (j = 0; j < m; j++) {

printf("%d个进程请求第%d个资源的数量:", i + 1, j + 1);

scanf("%d", &request[i][j]);

}

}

for (i = 0; i < n; i++) {

for (j = 0; j < m; j++) {

printf("已经分配给第%d个进程第%d个资源的数量:", i + 1, j + 1);

scanf("%d", &allocation[i][j]);

}

}

for (i = 0; i < n; i++) {

memset(used, 0, sizeof(used));

cnt = n;

if (dfs(i)) {

break;

}

}

if (i < n) {

puts("No deadlock!");

} else {

puts("Deadlock!");

}

system("pause");

}

本文来源:https://www.2haoxitong.net/k/doc/a74139737fd5360cba1adbe6.html

《操作系统 死锁的检测.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式