
I uppgift3a finns alla tre villkor för att deadlock ska uppstå.

1. De har icke delbara resurser: när en resurs låst får ingen annan använda denna.
2. Den har cirkulär väntan: tf1 låser m1 först och tf2 låser m2 först.
3. De lämnar inte tillbaka resurserna: Inte förrän trådarna är helt klara med 
uppgiften lämnas de låsbara resurserna tillbaka.

Deadlock uppstår lätt i 3a då båda trådarna låser resurs med samma nummer som trådfunktionen själv.

För att svara på implementationen varför det blir deadlock i 3a.
Tråden sover 0,1 eller 2 sekunder. låser sin resurs, sover 1 sekund, låser den andra resursen.

Då kan den ovanliga körningen (Testkörning 2) ske att en tråd sover 0 och den andra 2. annars blir det 
nästan alltid krock i att sova med 1 sekunds mellanrum och ha 1 sekunds sovning innan nästa resurs låses.

--
I uppgift3b saknas villkor tre(3.) som fanns i 3a.
Där låser man sin egna resurs men prövar om den andra resursen är ledig. 
Är inte den andra resursen ledig så blir det inget lås på andra resursen. 
Då släpps även första resursen i else satsen.

Det enda problemet som kan uppstå men i detta fall blir ovanligt är starvation. Då kan 
båda låsa sina egna resursen men pröva den andras innan tråden själv släppt sin resurs. 
Om detta sker om och om igen får ingen utföra sin uppgift. Men som sagt, det blir väldigt 
ovanligt när programmet har en random sleep.

en trylock returnerar error vid misslyckande och har returvärde 0 vid lyckad låsning.
