如何用代码实现死锁

package com.edu.thread_;
@SuppressWarnings({"all"})
public class DeadLock {
    public static void main(String[] args) {
        Object o1 = new Object();
        Object o2 = new Object();
        Thread t1 = new Thread1(o1,o2);
        Thread t2 = new Thread2(o1,o2);
        t1.setName("t1");
        t2.setName("t2");
        t1.start();
        t2.start();
    }
}
class Thread1 extends Thread {
    Object o1;
    Object o2;
    public Thread1(Object o1,Object o2) {
        this.o1 = o1;
        this.o2 = o2;
    }
    @Override
    public void run() {
        synchronized (o1) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (o2) {

            }
        }
    }
}
class Thread2 extends Thread {
    Object o1;
    Object o2;
    public Thread2(Object o1,Object o2) {
        this.o1 = o1;
        this.o2 = o2;
    }
    @Override
    public void run() {
        synchronized (o2) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            synchronized (o1) {

            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的C语言实现银行家算法的代码,可以避免: ```c #include <stdio.h> #include <stdbool.h> #define MAX_RESOURCES 5 int available_resources = MAX_RESOURCES; int allocated_resources[MAX_RESOURCES] = {0}; int max_resources[MAX_RESOURCES] = {0}; int need_resources[MAX_RESOURCES] = {0}; bool is_safe_state() { int work[MAX_RESOURCES]; bool finish[MAX_RESOURCES] = {false}; int i, j; for (i = 0; i < MAX_RESOURCES; i++) { work[i] = available_resources; } for (i = 0; i < MAX_RESOURCES; i++) { if (!finish[i] && need_resources[i] <= work[i]) { for (j = 0; j < MAX_RESOURCES; j++) { work[j] += allocated_resources[i * MAX_RESOURCES + j]; } finish[i] = true; i = -1; // start over } } for (i = 0; i < MAX_RESOURCES; i++) { if (!finish[i]) { return false; } } return true; } void release_resources(int release[MAX_RESOURCES]) { int i; for (i = 0; i < MAX_RESOURCES; i++) { allocated_resources[i] -= release[i]; need_resources[i] += release[i]; available_resources += release[i]; } } bool request_resources(int request[MAX_RESOURCES]) { int i; for (i = 0; i < MAX_RESOURCES; i++) { if (request[i] > need_resources[i]) { return false; } if (request[i] > available_resources) { return false; } } for (i = 0; i < MAX_RESOURCES; i++) { allocated_resources[i] += request[i]; need_resources[i] -= request[i]; available_resources -= request[i]; } if (!is_safe_state()) { release_resources(request); return false; } return true; } int main() { int i; int request[MAX_RESOURCES] = {0}; printf("Enter max resources:\n"); for (i = 0; i < MAX_RESOURCES; i++) { scanf("%d", &max_resources[i]); need_resources[i] = max_resources[i]; } while (true) { printf("Enter request:\n"); for (i = 0; i < MAX_RESOURCES; i++) { scanf("%d", &request[i]); } if (request_resources(request)) { printf("Request granted.\n"); } else { printf("Request denied. Not in safe state.\n"); } } return 0; } ``` 在这个代码中,我们定义了银行家算法中需要的一些变量和函数: - `MAX_RESOURCES`:最大资源数量。 - `available_resources`:当前可用资源数量。 - `allocated_resources`:已分配资源数量。 - `max_resources`:进程需要的最大资源数量。 - `need_resources`:进程还需要的资源数量。 - `is_safe_state()`:检查系统是否处于安全状态。 - `release_resources()`:释放资源。 - `request_resources()`:请求资源。 在主函数中,我们首先输入最大资源数量,并将每个进程的最大资源需求设为相同数量。然后,我们进入一个循环,不断地输入进程请求的资源数量,并根据银行家算法判断是否可以分配资源。如果可以,就分配资源并输出“Request granted.”;否则,就输出“Request denied. Not in safe state.”。 当然,这只是一个简单的示例代码,实际应用中可能会更复杂。但是,银行家算法的核心思想是一样的:通过检查系统是否处于安全状态来避免

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值