<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt"><br>
<div style="font-family:times new roman, new york, times, serif;font-size:12pt"><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><div style="font-family:times new roman, new york, times, serif;font-size:12pt;"><br><div style="font-family:times new roman, new york, times, serif;font-size:12pt;"><div style="font-family:arial, helvetica, sans-serif;font-size:13px;"><font size="2" face="Tahoma"><hr size="1"></font>&gt;<font size="2" face="Tahoma"><b><span style="font-weight:bold;">From:</span></b> VLAD TUDOSE &lt;vlad_tudose@yahoo.com<span style="font-weight:bold;">&gt;</span><br><b><span style="font-weight:bold;"></span></b></font>&gt;<font size="2" face="Tahoma"><b><span style="font-weight:bold;">To:</span></b> Sisteme de Operare &lt;so@cursuri.cs.pub.ro&gt;<br><b><span style="font-weight:bold;"></span></b></font>&gt;<font size="2" face="Tahoma"><b><span style="font-weight:bold;">Sent:</span></b> Fri, May 6, 2011 4:42:27
 PM<br><b><span style="
font-weight:bold;"></span></b></font>&gt;<font size="2" face="Tahoma"><b><span style="font-weight:bold;">Subject:</span></b> Re: [so] [Tema 4]Test3<br></font><br>
&gt;Salut,<br><br>&gt;Am urmatoarea problema la testul 3:&nbsp; am un deadlock si am intels de ce imi apare<br>&gt;dar nu reusesc sa imi dau seama care ar trebui sa fie comportamentul normal.<br><br>&gt;Testul 3 porneste 4 threaduri care executa operatiile de mai jos,<br>&gt;thread-urile sunt pornite in ordinea 1,2,3,4.<br><br>&gt;Thread 1: Enter, Wait(1), sleep(1), ...<br>&gt;Thread 2: Enter, Wait(0), sleep(1), ...<br>&gt;Thread 3: sleep(1), Enter, sleep(2), Signal(1)...<br>&gt;Thread 4: sleep(2), Enter, sleep(1), ...<br><br>&gt;Comporamentul programului meu este urmatorul(in ordine cronologica a evenimentelor):<br><br>&gt;Thread-ul 1 intra in monitor il marcheaza ca fiind ocupat ,intra in Wait<br>&gt;nu are pe cine sa planifice declara monitorul liber si asteapta dupa variabila de cond 1.<br><br>&gt;Thread-ul 2 intra in monitor il gaseste liber , intra in Wait , nu are pe cine sa planifice<br>&gt;declara monitorul liber si asteapta dupa variabila de
 cond 2.<br><br>&gt;Thread-ul 3 intra in monitor il gaseste liber si intra in sleep(2).<br><br>&gt;Thread-ul 4 gaseste monitorul ocupat este pus in coada Entry unde asteapta sa fie planificat.<br><br>&gt;Thread-ul 3 iese din sleep face Signal(1) -&gt; trece Thread-ul 1 in coada Waiting dupa care asteapta<br>&gt;in coada Signaler.<br><br>&gt;In acest moment toate thread-urile imi sunt blocate.<br><br>&gt;Poate sa ma lamureasca cineva ce e gresit in rationamentul meu ?<br><br>&gt;Multumesc,<br>&gt;Vlad<br><br>&gt;Eu am facut un thread intern care se ocupa cu managementul monitorului. In cazul tau, de exemplu, o sa gaseasca thread-ul 1 in wait si il porneste, dupa care thread-ul 3 din signaller si tot asa. Threadurile nu se planifica unul pe altul ca ajungi in situatii din astea. &gt;Monitorul (threadul intern) se ocupa cu managementul lor intern. Nu stiu daca este solutia perfecta dar tema trece toate
 testele.<br><br>&gt;Alex.<br><br>Hai ca revin asupra parerii de mai sus :).Acum lucrez la varianta in windows si mi-am dat seama ca m-am complicat aiurea pe linux. In cazul ala comportamentul cel mai simplu este altul. Thread-ul 3 face signal, trece thread-ul 1 in waiting si inainte sa se blocheze in signal porneste threadul al carui rand este (in cazul asta chiar thread-ul 1 din wait). In cazul asta nu mai ai nevoie de un thread intern si ar trebui sa se rezolve si deadlock-ul.<br><br>Alex<br>_______________________________________________<br><span><span><a target="_blank" href="http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii">http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii</a></span></span><br></div></div>



</div></div></div>



</div></body></html>