Trådarna i programmet a hamnar i en deadlock eftersom de uppfyller kraven för detta.
Vi har i det programmet circular wait, non-shareable resources, hold and wait samt non-preemptive. När tråd 1 låser mutex 1 och vill sedan ha mutex 2 så kan det vara så att tråd  2 redan låst mutex 2 och väntar på mutex 1, vi hamnar då i en deadlock och eftersom som ingen av trådarna kan låsa upp sitt mutex innan de fått tillgång till det andra mutexet så finns det inget sätt att ta sig ur tillståndet.

Trådarna i progamm b har också circular wait, med non-shareable resources (mutex) och non-preemptive. Men här finns det skydd för deadlock eftersom vi inte har hold and wait. Om en tråd har sitt första mutex och försöker vänta på  ett som är låst av en annan tråd så  istället för att vänta och hamna i deadlock så låser den upp sin mutex. 
Detta görs med pthread_mutex_trylock(), enligt manualsidan returnerar pthread_mutex_trylock() 0 endast om den får tillgång till mutex. Om man inte lyckas få mutex på grund av att den redan ägs av en annan tråd så kastas ett error nummer och då skippar man den portionen av koden som behövde mutex och släpper det första mutex som tråden redan hade låst. Hold and wait sker ej och deadlock undviks.

