"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