Process 1 is waiting for resource2 that Process 2 owned. Process 2 is waiting for resources1 tht Process 1 owned.
- mutual exclusion: the resource is protected by mutex. There is only one thread may gather it at the same time.
- hold and wait or partial allocation: P1 is waiting for P2. And P2 is waiting for P1. (via loop or condvar)
- no pre-emption: Resource 1 and 2 are unique that not allocated by system.
- resource waiting or circular wait: There is a circular chain: P1 -> P2 -> P1
We may append timeout to one of them to solve the deadlock problem.