[so] Tema 4, Test 15

Alin Radulescu radulescualin93 at gmail.com
Sun May 17 21:23:43 EEST 2015


Testul 15 are urmatorul flow:
Create thread initial ( 0 ): cuanta 1
so_end()

In paralel cu so_end (care ramane blocat pana cand termina toate
threadurile):

Threadul 0 este creat. (cuanta 1)
Threadul 0 creaza threadul 1 cu prioritate 4, care il preempteaza pe t0.

     Threadul 1 creaza threadul 2 (cu prioritate 3, este plasat in 'ready')
     Threadul 1 observa ca i-a ajuns la cuanta 0 si cedeaza CPU threadului
2.

            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)
            Threadul 2 creaza threadul 3 (cu prioritate 1, este plasat in
'ready')
            Threadul 2 observa ca i-a ajuns cuanta la 0 si cedeaza CPU
threadului 1

     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'.


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.


Aici este de vina checkerul, sau trebuie sa modific programul atfel:
- un thread sa execute sarcini in continu, inclusiv cand are cuanta 0
- daca o sarcina de executat este consumatoare de cuanta, iar threadul are
0, atunci cedeaza CPU
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20150517/5a96cc09/attachment.html>


More information about the so mailing list