[so] De ce nu pot fi semafoare/mutex in signal handlers?

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Fri Jun 7 09:21:43 EEST 2013


Mihai Barbulescu <b12mihai at gmail.com> writes:
> 2013/6/6 Mihnea Dobrescu-Balaur <mihneadb at gmail.com>:
>> Ce se întâmplă dacă procesul (în flow-ul normal) face acquire, și
>> ”boom!” vine semnalul? SH-ul va încerca și el să facă acquire.
>> Deadlock și adio. :)
>
> Multumesc, are sens si raspunde la intrebarea mea. Doream sa stiu _de
> ce_ se fac afirmatiile: "Now since a signal handler can't use
> semaphores, mutexes etc. and therefore can't access shared data " +
> "You shouldn't access shared data from signal handler"
>
> Una e cu can't (adica nu se poate deloc - ma indoiesc - cred ca se pot
> face apelurile) si alta e cu should not, adica recomandare din cauza a
> ceea ce ai zis tu.

E un aspect de limbaj. În loc de "can't" consideră "must not".

Soluția, dacă ai nevoie de acces exclusiv este dezactivarea semnalelor
(sigprocmask) în porțiunea din programul tău în care accesezi datele
comune. Atunci poți accesa inclusiv shared data. Evident, e recomandat
să eviți asta, dar dacă nu ai de ales, doar dezactivarea semnalelor e
soluția.

Răzvan


More information about the so mailing list