gpt4 book ai didi

java - 有可能陷入僵局吗?

转载 作者:行者123 更新时间:2023-12-01 13:43:32 25 4
gpt4 key购买 nike

我正在努力弄清楚死锁是如何工作的......

public void withdraw(double amount) {
balanceChangeLock.lock();
try {
while (balance < amount) {} // wait balance to grow ...
double nb = balance - amount;
balance = nb;
} finally {
balanceChangeLock.unlock();
}
}

编辑:我遗漏了更多代码

public void deposit(double amount){
balanceChangeLock.lock();
try{
balance = balance + amount;
} finally {
balanceChangeLock.unlock();
}
}

这段代码有可能陷入死锁吗?

这不是作业,我有期末考试,这是我正在复习的老师的笔记,但我不太明白

最佳答案

让我通过一个简单的例子帮助您了解什么是死锁:

我们有两个线程(T1,T2)我们有两把锁(L1, L2)我们有两个关键操作(OP1和OP2),需要获取L1L2才能执行

发生以下执行顺序:

T1 begins executing OP1
T2 begins executing OP2
T1 acquires L1 as part of OP1
T2 acquires L2 as part of OP2
T1 attempts to acquire L2 and is blocked because L2 is currently held by T1
T2 attempts to acquire L1 and is blocked because L1 is currently held by T1

因此,我们陷入了致命的拥抱。这只是一个简单的例子。如果您根据上述场景创建一个图表来查看其结果,将会有所帮助。请注意,获取锁的顺序对于出现死锁至关重要。这就是为什么这些问题是间歇性的并且非常难以调试的部分原因。

关于java - 有可能陷入僵局吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20510335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com