Anledningen att Uppg3a.c oftast ger 0:or i utskrift är att deadlock uppstår då tråd 1 (t1) låser m1 och önskar låsa m2, samtidigt som tråd 2 (t2) låser i omvänd ordning, dvs låser m2 och önskar låsa m1 därefter. Första gången detta sker då vardera tråd äger varsin av dessa parallelt dvs m1 och m2 är upptagna av t1 och t2 och bägge begär andra låsningen och dessa är upptagna.
0:an som skrivs ut kommer från att när en tråd väl varit inne och lyckats med att låsa bägge resurser sätter till sin siffra(som skrivs ut av huvud processen), men ändrar även tillbaks till 0 innan den låser upp m1 och m2 innan den börjar om sin while funktion medan run fortfarande är större än 0.

Lösningen Uppg3b.c tillför är en trylock när andra låsningen begär för respektive t1 och t2, när den inte lyckas låsa sin andra begärda m1/m2 så står inte tråden kvar och blockerar första låsningen för andra tråden, utan låser upp och försöker på nytt, vilket gör att andra tråden kanske lyckas utföra sin thread=[siffra].
