In a nutshell
A deadlock is a traffic jam between programs: each one is holding a resource the next one needs, arranged in a closed loop, so none of them can ever move forward. You can draw the situation as a graph of who-holds-what and who-wants-what; when single-copy resources form a loop, that loop is the deadlock, and breaking any one link frees everyone.