这种情况下会出现死锁吗?

发布于 2024-09-18 07:33:31 字数 169 浏览 8 评论 0原文

我是否正确地说,在以下情况下应该会发生死锁:

对象 P 调用对象 A 的同步方法,
调用对象 B 的同步方法,
调用对象A的同步方法。

抱歉,如果我看起来很愚蠢,很可能确实如此。但这就是我问的原因。谢谢!

Am I right in saying that a deadlock is supposed to happen in the following case:

Object P calls a synch method of object A,
that calls a synch method of object B,
that calls a synch method of object A.

Sorry if it looks stupid of me, most probably it is. But that's why I'm asking. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

云归处 2024-09-25 07:33:31

根据您提供的信息 - 不,不会发生死锁:

首先,您没有提到多个线程。单个线程不会导致死锁。但我们假设您有多个线程。

因此,如果来自不同线程的任何其他对象以相反的顺序调用其中一些方法,则可能会发生死锁。

这种情况的解释如下:Thread-1获得进入methodA所需的锁,然后尝试进入methodB。如果同时另一个线程 - Thread-2 调用 methodB 并获取其锁,则尝试进入 methodA,但是 Thread-1 已经拥有锁,因此 Thread-2 等待。但是,Thread-1 无法进入 methodB,因为 Thread-2 拥有锁。他们永远等待(僵局)。

By the information you give - no, a deadlock can't occur:

First, you don't mention multiple threads. A single thread can't cause a deadlock. But let's assume you have multiple threads.

So, if any other object, from different thread invokes some of these methods in reverse order, then a deadlock can occur.

The explanation of the situation is as follows: Thread-1 obtains the lock required to enter methodA, and then tries to enter methodB. If at the same moment another thread - Thread-2 invokes methodB and obtains the lock for it, then tries to enter methodA, but Thread-1 already has the lock, so Thread-2 waits. However, Thread-1 can't enter methodB because Thread-2 has the lock. And they wait forever (deadlock).

爱给你人给你 2024-09-25 07:33:31

不。它是同一个线程,同步方法是可重新输入的。

如果您从维基百科中获取定义:“死锁是一种情况,其中两个或更多相互竞争的操作都在等待另一个完成”。您只有一个操作(线程)。

No. It is same thread, synch methods are reenterable.

If you take definition from wikipedia: "A deadlock is a situation wherein two or more competing actions are each waiting for the other to finish". You have only one action (thread) .

短暂陪伴 2024-09-25 07:33:31

不会,线程已经持有A上的锁,所以不会死锁。线程永远不能与自身争用锁。

No, the thread will already hold the lock on A, so it won't deadlock. A thread can never contend for a lock with itself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文