"George-Sebastian PÎRTOACĂ (66847)" via so <so@cursuri.cs.pub.ro>
writes:
> Salut,
>
> Am vazut ca in cursul 8 pus pe ocw se precizeaza ca firele de executie
> ale unui proces partajeaza masca de semnale (pagina 15 din fisierul
> PDF). In man (man 7 pthreads) se precizeaza ca "As well as the stack,
> POSIX.1 specifies that various other attributes are distinct for each
> thread, including: ... signal mask (pthread_sigmask(3)) ...".
>
>
> Din cate am putut observa, ceea ce se intampla atunci cand un proces
> primeste un semnal asincron este ca nucleul se uita daca thread-ul
> "principal" (cel pentru care pid == tgid) blocheaza sau nu semnalul:
> daca da, atunci cauta iterativ prin lista de firele de executie si se
> opreste la primul thread care nu blocheaza semnalul, daca nu atunci ii
> livreaza semnalul. Aceste observatii sunt valabile pentru Linux.
>
> Prin urmare, fiecare fir de executie dintr-un proces are propria masca
> de semnale (privata) sau imi scapa mie ceva?

Salutare.

Masca de semnale a unui proces nu e partajată între thread-uri. Fiecare
thread are mască proprie; e o greșeală în curs. Am corectat în curs[1].

Modul de tratare al semnalelor este comun, adică există un singur
handler, dar fiecare thread are masca sa și poate bloca anumite semnale,
parcurgerea măștilor făcându-se în ordine, așa cum spui tu.

Pentru procese single-threaded folosim sigprocmask() pentru controlul
măștii, iar pentru procese multi-threaded folosim pthread_sigmask().

Vezi și precizările de aici[2] și aici[3].

[1] https://ocw.cs.pub.ro/courses/so/cursuri/curs-08
[2] 
https://stackoverflow.com/questions/11679568/signal-handling-with-multiple-threads-in-linux
[3] 
http://poincare.matf.bg.ac.rs/~ivana/courses/tos/sistemi_knjige/pomocno/apue/APUE/0201433079/ch12lev1sec8.html

Răzvan
_______________________________________________
http://ocw.cs.pub.ro/courses/so/info/lista-discutii

Raspunde prin e-mail lui