C# 中的死锁和饥饿
当一个资源被一个线程锁住,而另一个线程在同一时间也需要该资源时,便会发生死锁。这个问题多发于多处理系统。
当两个或多个线程等待另一个线程拥有的资源时,便会发生死锁。下面是一个示例:
线程一 | 线程二 |
---|---|
获取锁 P | 获取锁 Q |
请求锁 Q | 请求锁 P |
线程一无法获取锁 Q,因为它属于线程二。同理,线程二也无法获取锁 P,因为它的原始所有者是线程一。
如果存在三个线程和三个公共锁,则死锁也可能形成一个三向死锁。它同样可以形成四向、五向以及其他死锁。
饥饿是一种在线程程序中一个或多个可运行线程的永久阻塞。
广告