<div dir="ltr">Testul 15 are urmatorul flow:<div>Create thread initial ( 0 ): cuanta 1</div><div>so_end()</div><div><br></div><div>In paralel cu so_end (care ramane blocat pana cand termina toate threadurile):<br></div><div><br></div><div>Threadul 0 este creat. (cuanta 1)</div><div>Threadul 0 creaza threadul 1 cu prioritate 4, care il preempteaza pe t0.</div><div><br></div><div>     Threadul 1 creaza threadul 2 (cu prioritate 3, este plasat in 'ready')</div><div>     Threadul 1 observa ca i-a ajuns la cuanta 0 si cedeaza CPU threadului 2.</div><div><br></div><div>            Threadul 2 verifica ca inaintea sa a fost threadul 1, si noteaza faptul ca si el a prins timp pe procesor (folosind define-ul SO_FAIL_IF_NOT_PRIO). Aceasta actiune nu consuma cuanta, asa ca merge mai departe. (cuanta = 1)</div>            Threadul 2 creaza threadul 3 (cu prioritate 1, este plasat in 'ready')<div>            Threadul 2 observa ca i-a ajuns cuanta la 0 si cedeaza CPU threadului 1</div><div><br></div><div>     Threadul 1 acum verifica ca ultima prioritate setata a fost 4, dar threadul 2 a prins timp pe procesor si astfel a setat prioritatea '3'.</div><div><br></div><div><br></div><div>Acest comportament nu s-ar fi reprodus daca threadurile ar fi avut cuanta cel putin 2, sau daca un thread ar continua sa incerce sa execute sarcini care nu consuma cuanta atunci cand are cuanta 0.</div><div><br></div><div><br></div><div>Aici este de vina checkerul, sau trebuie sa modific programul atfel:</div><div>- un thread sa execute sarcini in continu, inclusiv cand are cuanta 0</div><div>- daca o sarcina de executat este consumatoare de cuanta, iar threadul are 0, atunci cedeaza CPU</div></div>