C# 中的死锁和饥饿


当一个资源被一个线程锁住,而另一个线程在同一时间也需要该资源时,便会发生死锁。这个问题多发于多处理系统。

当两个或多个线程等待另一个线程拥有的资源时,便会发生死锁。下面是一个示例:

线程一线程二
获取锁 P获取锁 Q
请求锁 Q请求锁 P

线程一无法获取锁 Q,因为它属于线程二。同理,线程二也无法获取锁 P,因为它的原始所有者是线程一。

如果存在三个线程和三个公共锁,则死锁也可能形成一个三向死锁。它同样可以形成四向、五向以及其他死锁。

饥饿是一种在线程程序中一个或多个可运行线程的永久阻塞。

更新于: 22-06-2020

1K+ 人气

开启您职业生涯

完成课程获得认证

开始
广告