I det första programmet, uppg3a, använder sig de båda trådarna av pthread_mutex_lock för att låsa m1 och m2. När detta kommando körs så kommer 0 att returneras när funktionen lyckas. Om det funktionen vill låsa dock redan är låst så kommer funktionen vänta tills dess att det blir ledigt för att sedan låsa det igen innan den returnerar. Detta framgår i manualsidan för pthread_mutex_lock - “If the mutex  is  already  locked,  the  calling thread  shall  block until the mutex becomes available.”. Funktionen tf1 i Uppg3a kallar först på pthread_mutex_lock för m1 och sedan för m2. Om funktion tf2 dock vid samma tillfälle,inom samma sekund, kallar på en pthread_mutex_lock för m2 som tf1 kallar på pthread_mutex_lock för m1 så kommer dock ett deadlock att uppstå eftersom tf2 har låst den resurs som tf1 behöver för att kunna fortsätta, dvs m2. Och tf1 har låst den resurs som tf2 behöver för att kunna  fortsätta, dvs m1. Detta resulterar alltså I ett deadlock och ingen av trådarna äger de båda resurserna.

I det andra programmet, uppg3b, använder sig de båda trådarna först av pthread_mutex_lock för att låsa den första resursen. När de väl har fått sin första resurs låst så använder de istället  pthread_mutex_trylock för att låsa den andra resursen.  pthread_mutex_trylock till skillnad från pthread_mutex_lock kommer om resursen redan är låst att returnera dirrekt och inte vänta på att få tag i resursen. Detta står I manualsidan - “ The pthread_mutex_trylock() function shall be equivalent to pthread_mutex_lock(), except that if the mutex object referenced by mutex is currently locked (by any thread, including the current thread), the call shall return immediately.“ Om detta sker så låser den tråden upp den andra resursen som den redan har låst. Detta gör den med pthread_mutex_unlock, utrag från manualsidan “The pthread_mutex_unlock() function shall release the mutex object referenced by mutex.“

På det här viset tillåts den andra tråden göra klart sitt arbete och låsa upp de resurserna den arbetar med. Och detta gör det möjligt för tråden som inte fick tag I resursen förra gången kunna få tag i den nu. På det här viset undviks deadlocks.

