当一个资源被一个线程锁定并且同时另一个线程需要该资源时,就会发生死锁。此问题在多处理系统中经常发生。
当两个或多个线程等待属于另一个线程的资源时,可能会发生此问题。这是一个示例 -
线程一线程二
获取锁定 p 获取锁定 q tr>
请求锁q 请求锁p
线程一不会获得锁q,因为它属于到线程二。同样,线程二也不会获得锁 p,因为它的原始所有者是线程一。
死锁也可以是三向死锁,如果三个线程和三个锁是公共的,就会发生这种情况。同样,四路、五路和其他死锁也可能发生。
饥饿是多线程应用程序中一个或多个可运行线程的永久阻塞。
以上就是c# 中的死锁和饥饿的详细内容。