multithreading - 死锁有哪些类型?

标签 multithreading deadlock

根据标题,死锁有哪些类型?最近我被问到这个问题,但我只知道死锁的类型,当线程 A 正在等待线程 B 获取的锁,而线程 B 正在等待线程 A 获取的锁时。是否有还有其他吗?

最佳答案

可以考虑两种类型的死锁:

<强>1。资源死锁

当进程试图获得对设备、文件、锁、服务器或其他资源的独占访问权时发生。

资源死锁模型中,进程会一直等待,直到收到它请求的所有资源。

资源模型也称为AND 模型。在此模型中,当且仅当存在等待进程的循环时才会发生死锁,每个等待进程都依赖于循环中的下一个进程才能取得进展。

可能的情况:事务处理场景

<强>2。沟通僵局

也称为通信死锁模型,发生在进程 A 试图向进程 B 发送消息时,进程 B 试图向进程 C 发送消息,进程 C 试图向进程 C 发送消息A.

通信死锁模型也称为OR模型

显然,它很容易满足死锁发生的循环等待条件

可能的情况:消息传递场景

希望这对您有用并让提问者满意。

关于multithreading - 死锁有哪些类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448953/

相关文章:

sql-server - 在表中插入数据时如何避免表锁

java - EntityUtils.toString() 中的间歇性死锁

java - 使用线程同时创建一个类的十个实例

swift - 从单个串行队列访问 Swift 实例变量导致 Thread Sanitizer 问题

mysql - jpaRepository 出现死锁

Java 死锁 : are there cases where it is not a bug?

java - 执行器中的意外死锁

java - C# 和 Java 中的 GUI 组件是否分别由单独的线程运行?

c++ - 更改窗口的消息循环线程

python - 什么时候需要 Queue.join() ?