单线程应用程序中的死锁

swe*_*tha 4 multithreading deadlock single-threaded

单线程应用程序可以出现死锁吗?如果是,请提供一个例子.

dan*_*ben 6

是的,如果您拥有不可重入的锁并且线程尝试重新获取其已拥有的锁(例如通过递归调用),则单线程应用程序可能会死锁.

编辑:我看到帖子被标记为"Java"; 我不知道这是否是更新,或者我之前是否错过了,但无论如何,Java中的锁是重入的,因此您将无法以这种方式死锁单线程应用程序.


Tho*_*rin 5

这取决于你如何解释这个问题.如果涉及与其他应用程序共享的资源,则为是.没有共享资源,没有.

死锁是指两个或多个竞争行为等待另一个完成的情况,因此两者都没有.

使用单个线程,只有一个操作,它无法与自身竞争.

来自维基百科:

必要的条件

有一个必要和充分的条件可以发生死锁,这被称为Coffman条件,这是他们在1971年EG Coffman的文章中的第一次描述.

  1. 互斥条件:一次不能由多个进程使用的资源
  2. 保持和等待条件:已持有资源的进程可以请求新资源
  3. 没有抢占条件:没有资源可以从持有它的进程中强制删除,资源只能通过进程的显式操作来释放
  4. 循环等待条件:两个或多个进程形成一个循环链,其中每个进程等待链中下一个进程所持有的资源

根据这个定义,需要两个进程来构成死锁.


Jon*_*nas 5

是的,如果应用程序与另一个应用程序共享资源,它可能会陷入僵局.