[so] Detectare terminare thread

Radu Stancu stancumradu at gmail.com
Tue May 7 22:34:05 EEST 2013


Razvan Crainea <razvan.crainea at ...> writes:

> 
> 2013/5/7 Radu Stancu <stancumradu <at> gmail.com>:
> > Salut,
> > Cum pot sa determin ca un thread s-a terminat inainte sa ii expire cuanta?
> > De exemplu, la testul 4 se creeaza n-1 threaduri, dar cuanta este de n si mi
> > se blocheaza programul la join pentru ca nu are cine sa trezeasca cele n-1
> > threaduri (acestea asteapta la n-1 variabile de condtie, care sunt semnalate
> > doar daca se termina cuanta threadului curent sau este preemptat. Cum nu se
> > intampla nici unul dintre cazuri, threadurile raman blocate)
> >
> > Structura so_fork:
> > creare thread ---- blocare intr-o functie auxiliara daca nu ruleaza
> >                    handler(prio)
> >                    exit
> > verificare prioritati si alegerea threadului de rulat
> > semnalizare thread de rulat si blocare thread curent
> >
> 
> În principiu, orice thread, înainte de a elibera resursele și ceda
> procesorul, trebuie să planifice următorul thread. În cazul testului
> 4, masterul își termină primul execuția, deci el este cel care
> planifică primul următorul thread.
> 
> Cheers,
> --
> Răzvan Crainea
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so/info/lista-discutii
Am rezolvat problema, dar acum a aparut alta mai ciudata. Se intampla
cateodata ca un thread sa nu apuce sa dea wait la timp si sa primeasca
signal inainte de wait, iar apoi sa se blocheze. Am reusit sa remediez
problema cat de cat, acum apare doar la ultimul thread creat si doar in cam
30% din rulari, restul dau passed.Ai idee ce se poate intampla?
Un exemplu de eroare:
6
nt=0
Threadul 0 s-a trezit!
nt=1
2.S-a oprit threadul 1!
-1228932288+
nt=2
S-a oprit threadul 1!
2.S-a oprit threadul 2!
-1237324992+
nt=3
S-a oprit threadul 2!
2.S-a oprit threadul 3!
-1245717696+
nt=4
S-a oprit threadul 3!
2.S-a oprit threadul 4!
-1254110400+
nt=5
S-a oprit threadul 4!
2.S-a oprit threadul 5!
-1262503104+
nt=6
S-a oprit threadul 5!
2.S-a oprit threadul 6!
-1270895808+
Threadul 1 se va trezi!
Threadul 1 s-a trezit!
-1228932288-
Threadul 2 se va trezi!
Threadul 2 s-a trezit!
-1237324992-
Threadul 3 se va trezi!
Threadul 3 s-a trezit!
-1245717696-
Threadul 4 se va trezi!
Threadul 4 s-a trezit!
-1254110400-
Threadul 5 se va trezi!
Threadul 5 s-a trezit!
-1262503104-
Threadul 6 se va trezi!
S-a oprit threadul 6!




More information about the so mailing list