C#中的死锁和饥饿

当资源被一个线程锁定并且另一个线程同时需要该资源时,就会发生死锁。在多处理系统中,此问题经常发生。

当两个或多个线程等待属于另一个线程的资源时,可能会发生这种情况。这是一个例子-

线程一线程二
带锁P带锁Q
要求锁定Q要求锁P

线程一不会获得锁Q,因为它属于线程二。同样,线程二不会获得锁P,因为它的原始所有者是线程一。

如果三个线程和三个锁相同,则死锁也可以是三向死锁。同样,它可能会在四向,五向和其他死锁中发生。

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