<br><br><b><i>Cristi B <cristib84@yahoo.com></i></b> wrote:<blockquote class="replbq" style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"> Folosind testul public, am facut un print de genul "Oops deja era cineva in monitor" atunci cand un thread ar trebuii sa intre in monitor dar era deja cineva acolo(variabila active era 1 si eu incercam sa pun din nou 1)...<br> <br> <<<<br> Nu as vrea sa iti cer un efort suplimentar de debug, dar:<br> -Din ce mi-ai spus pot deduce doar ca daca exista o problema, <br> aceasta ar fi la planificarea unui thread din <br> EntryQueue. Doar din atata nu imi pot da seama<br> care este problema si cu atat mai mult unde <br> e gresit testul.<br> <br> -Banuiesc ca atunci cand ai constatat problema, ai debugat <br> mai amanuntit zona aceea de cod(cu printf-uri <br> de exemplu). La acest
gen de informatii suplimentare<br> ma refeream in mailul anterior.<br> <br> Am sa dau un exemplu de informati care m-ar putea ajuta <br> in a debuga:<br> <br> La testul 3(Signal and Wait), cand iese din monitor<br> al doilea din primele 3 threaduri apare problema. <br> Al doilea iese prin functia IesireDinSignal3() <br> cazul if(GetNrX()==1)<br> <br> Pe acest caz(GetNrX()==1), test("Verifica6",Verifica(1,1,0,1,0,0)==0);<br> verifica corect , deci monitorul inca fucntioneaza corect. <br> DAR, imediat dupa, desi ar trebui sa deblochez doar al<br> treilea fir din primele trei(singurul ramas acum in <br> Signallers Queue), monitorul meu il deblocheaza <br> pe acesta DAR si pe cel din EntryQueue(in mod gresit). <br> Cu toate acestea, testul nu sesizeaza greseala.<br> <br> (Eventual, daca nu e prea mult de cerut:::)Testul <br> nu sesizeaza greseala deoarece nu exista o functie <br> "test/Verifica" si dupa sleep-ul de pe ramura
<br> if(GetNrX()==2)<br> <br> Poate la prima vedere descrierea de mai sus pare<br> mult prea amanuntita. Dar cand ai debugat acea zona de cod, <br> cu siguranta ai obtinut astfel de informatii:<br> -la ce test<br> -la ce actiune a carui fir se intampla<br> -pe ce ramura din ce functie<br> -etcetc<br> -cum ajung cele doua sa ruleze simultan(bugul din <br> monitorul tau).Daca sti functia si ramura<br> (deci ce operatie facea monitorul atunci), probabil <br> ca poti sa iti dai seama de acest lucru.<br> -eventual(daca nu e foarte greu):::de ce nu vede <br> testul acest lucru (bugul din test)<br> <br> De asemeni, un monitor este implmentat <br> corect doar daca a apelat corect functiile din <br> CallbackMonitor.h si CallbackRW.h. Probabil <br> ca tu le-ai apelat corect, dar poate ai putea sa <br> mai verifici o data acest aspect.<br> <br> De exemplu, pentru o implementare<br> in care cozile sunt reprezentate prin semafoare.<br> Intrarea in coada
SignallersQueue:<br> <br> IncSignal();<br> sem_wait(&monitor->semaforSQ);<br> DecSignal();<br> <br> <br> Adica dupa ce ai apelat IncSignal,<br> singurul lucru care il faci dupa este sa te <br> blochezi in coada. Dupa ce ai iesit din coada, primul lucru <br> care il faci este sa apelezi DecSignal<br> <br> <br> Inca o data, sper sa nu reprezinte o sarcina <br> in plus pentru tine. Dar banuiesc ca:<br> -informatiile de mai sus nu sunt greu de <br> obtinut(probabil ca deja le ai)<br> -esti la fel de curios ca si mine sa afli daca si eventual unde <br> este testul gresit (eventual si unde este monitorul gresit).<br> >>><br> <br> <br> <br>Oare trebuie sa protejez cu un mutex si monitorul ?(asta s-ar traduce prin inca o coada, adica dupa ce stau la cozile waiting, entry sa mai stea la inca o coada)<br> <br> <br> <<<<br> Nu. Monitorul ar trebui sa fie implementat astfel incat sa <br> nu aiba nevoie de obiecte de sincronizare
suplimentare.<br> >>><br> <br> <br><br><b><i>adrian nistor <adriannistorrr@yahoo.com></i></b> wrote:<blockquote class="replbq" style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"> Ai constatat acest lucru folosind testul public<br> s-au testele tale? Ai putea te rog sa imi dai <br> mai multe amanunte despre conditiile in care <br> s-a intamplat acest lucru? <br><br><b><i>Cristi B <cristib84@yahoo.com></i></b> wrote:<blockquote class="replbq" style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;">Am implementat monitorul dupa specificatiile din enunt si implementarea mea trece toate testele de monitor si readers&writers totusi:<br>am avut curiozitatea sa vad dc atunci cand se planifica un thread ptr executie daca mai exista un thread activ (adica vor fi 2 thread-uri care se executa in monitor) si surpriza, exista 2 threaduri care ruleaza in acelasi timp desi in enunt se specifica
clar ca nu pot exista 2.<br>Unde gresesc? Oare testerul nu a verificat si asta ? Dc implementarea mea este gresita, mi se scade desi programul trece testele ?<br><div> </div><hr size="1">Everyone is raving about <a href="http://us.rd.yahoo.com/evt=42297/*http://advision.webevents.yahoo.com/mailbeta">the all-new Yahoo! Mail beta.</a>_______________________________________________<br>so mailing list<br>so@cursuri.cs.pub.ro<br>http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so<br></blockquote><br><div> </div><hr size="1">Check out <a href="http://us.rd.yahoo.com/evt=43257/*http://advision.webevents.yahoo.com/mailbeta">the all-new Yahoo! Mail beta</a> - Fire up a more powerful email and get things done faster._______________________________________________<br>so mailing list<br>so@cursuri.cs.pub.ro<br>http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so<br></blockquote><br><div> </div><hr size="1">Want to start your own business? Learn how on <a
href="http://us.rd.yahoo.com/evt=41244/*http://smallbusiness.yahoo.com/r-index">Yahoo! Small Business.</a></blockquote><br><p> 
<hr size=1>Any questions? Get answers on any topic at <a href="http://answers.yahoo.com/;_ylc=X3oDMTFvbGNhMGE3BF9TAzM5NjU0NTEwOARfcwMzOTY1NDUxMDMEc2VjA21haWxfdGFnbGluZQRzbGsDbWFpbF90YWcx">Yahoo! Answers</a>. Try it now.