操作系统(六)DeadLock


在这里插入图片描述

一、概念

A set of processes is deadlocked if each process in the set is waiting for an event that only another process in the set can cause.

二、4个必要条件

  • Mutual exclusion condition(互斥执行)
     Each resource is either currently assigned to exactly one process or is available.

  • Hold and wait condition(保持和等待)
     process holding resources can request additional

  • No preemption condition(非抢占式)
     previously granted resources cannot forcibly taken away

  • Circular wait condition(循环等待)
     must be a circular chain of 2 or more processes
     each is waiting for resource held by next member of the chain

在这里插入图片描述

概念题

  • 死锁条件
    Four Conditions for Deadlock: Mutual exclusion ,Hold and wait, No preemption and Circular wait
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
银行家算法(Banker's Algorithm)是一种避免死锁(Deadlock)的算法,它保证系统资源的分配是安全的。以下是一个简单的 C++ 实现。 ```c++ #include <iostream> #include <vector> using namespace std; const int N = 1000; int n, m; // 进程数、资源种类数 int available[N]; // 每种资源可用的数量 int allocation[N][N]; // 每个进程已经分配的资源数量 int need[N][N]; // 每个进程还需要的资源数量 bool finish[N]; // 每个进程是否完成 int main() { // 输入 n 和 m cin >> n >> m; // 输入 available 数组 for (int i = 0; i < m; i++) { cin >> available[i]; } // 输入 allocation 和 need 数组 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> allocation[i][j]; need[i][j] = allocation[i][j]; } } // 初始化 finish 数组 for (int i = 0; i < n; i++) { finish[i] = false; } // 循环处理每个进程 bool flag = true; vector<int> safe_sequence; while (flag) { flag = false; for (int i = 0; i < n; i++) { if (!finish[i]) { bool can_finish = true; for (int j = 0; j < m; j++) { if (need[i][j] > available[j]) { can_finish = false; break; } } if (can_finish) { for (int j = 0; j < m; j++) { available[j] += allocation[i][j]; } finish[i] = true; safe_sequence.push_back(i); flag = true; } } } } // 输出结果 if (safe_sequence.size() == n) { cout << "Safe sequence: "; for (int i = 0; i < safe_sequence.size(); i++) { cout << safe_sequence[i] << " "; } cout << endl; } else { cout << "Deadlock detected" << endl; } return 0; } ``` 注意:这里假设每种资源的数量都不超过 1000,可以根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值