开发者

Does a Deadlock Occur in This Case?

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!


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).


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) .


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜