How are deadlocks, unbounded priority inversions, and chain blocking prevented using PCP?

Deadlocks, Unbounded Priority Inversions and Chain Blocking Prevented using PCP

Deadlocks occur only when different (more than one) tasks hold part of each others required resources at the same time, and then they request for the resources being held by each other.

But under PCP, when one task is executing with some resources, any other task cannot hold a resource that may ever be needed by this task. That is, when a task is granted one resource, all its required resources must be free.

This prevents the possibility of any deadlock. PCP overcomes unbounded priority inversions because whenever a high priority task waits for some resources which are currently being used by a low priority task, then the executing lower priority task is made to inherit the priority of the higher priority task.

So, the intermediate priority tasks cannot preempt lower priority task from CPU usage. Therefore, unbounded priority inversions cannot occur in PCP. Tasks are single blocking under PCP.

That means, under PCP a task can undergo at most one inversion during its execution. This feature of PCP prevents chain blocking.