<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:arial, helvetica, sans-serif;font-size:13px"><font size="2" face="Tahoma"><hr size="1"><b><span style="font-weight: bold;"></span></b></font>><font size="2" face="Tahoma"><b><span style="font-weight: bold;">From:</span></b> VLAD TUDOSE <vlad_tudose@yahoo.com<span style="font-weight: bold;">></span><br><b><span style="font-weight: bold;"></span></b></font>><font size="2" face="Tahoma"><b><span style="font-weight: bold;">To:</span></b> Sisteme de Operare <so@cursuri.cs.pub.ro><br><b><span style="font-weight: bold;"></span></b></font>><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>><font size="2" face="Tahoma"><b><span style="font-weight: bold;">Subject:</span></b> Re: [so] [Tema 4]Test3<br></font><br>
>Salut,<br><br>>Am urmatoarea problema la testul 3: am un deadlock si am intels de ce imi apare<br>>dar nu reusesc sa imi dau seama care ar trebui sa fie comportamentul normal.<br><br>>Testul 3 porneste 4 threaduri care executa operatiile de mai jos,<br>>thread-urile sunt pornite in ordinea 1,2,3,4.<br><br>>Thread 1: Enter, Wait(1), sleep(1), ...<br>>Thread 2: Enter, Wait(0), sleep(1), ...<br>>Thread 3: sleep(1), Enter, sleep(2), Signal(1)...<br>>Thread 4: sleep(2), Enter, sleep(1), ...<br><br>>Comporamentul programului meu este urmatorul(in ordine cronologica a evenimentelor):<br><br>>Thread-ul 1 intra in monitor il marcheaza ca fiind ocupat ,intra in Wait<br>>nu are pe cine sa planifice declara monitorul liber si asteapta dupa variabila de cond 1.<br><br>>Thread-ul 2 intra in monitor il gaseste liber , intra in Wait , nu are pe cine sa planifice<br>>declara monitorul liber si asteapta dupa variabila de
cond 2.<br><br>>Thread-ul 3 intra in monitor il gaseste liber si intra in sleep(2).<br><br>>Thread-ul 4 gaseste monitorul ocupat este pus in coada Entry unde asteapta sa fie planificat.<br><br>>Thread-ul 3 iese din sleep face Signal(1) -> trece Thread-ul 1 in coada Waiting dupa care asteapta<br>>in coada Signaler.<br><br>>In acest moment toate thread-urile imi sunt blocate.<br><br>>Poate sa ma lamureasca cineva ce e gresit in rationamentul meu ?<br><br>>Multumesc,<br>>Vlad<br><br>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. Monitorul (threadul intern) se ocupa cu managementul lor intern. Nu stiu daca este solutia perfecta dar tema trece toate
testele.<br><br>Alex.<br><br>_______________________________________________<br><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><br></div></div>
</div></body></html>