[so] sigwait

Iulian Moraru iulian at gmail.com
Sun Nov 25 15:46:18 EET 2007


On Nov 25, 2007 1:35 PM, Andrei Ciuca <andrei.ciuca at gmail.com> wrote:
> din laborator :
>
> "Sigwait suspendă firul apelant până unul dintre semnalele specificate în
> mască este transmis spre firul de execuţie respectiv. La revenire funcţia va
> salva în sig numărul semnalului primit. Semnalele din mulţimea specificată
> prin mască trebuie să fie anterior blocate şi nu ignorate la intrarea în
> sigwait. Dacă semnalul primit are un handler ataşat el nu va fi apelat.
> Pentru mai multe detalii despre semnale pentru threaduri puteţi folosi
> linkul de la sfarsit"
>
> De aici ar rezulta ca trebuie sa facem noi ceva explicit pentru a bloca
> semnalele asteptate.
>
> -------------------------------
>
> din linkul de la sfarsit :
>
> " J.4: When one thread is blocked in sigwait(), other threads no longer
> receive the signals sigwait() is waiting for! What happens?
>
>  It's an unfortunate consequence of how LinuxThreads implements sigwait().
> Basically, it installs signal handlers on all signals waited for, in order
> to record which signal was received. Since signal handlers are shared with
> the other threads, this temporarily deactivates any signal handlers you
> might have previously installed on these signals.
>
>  Though surprising, this behavior actually seems to conform to the POSIX
> standard. According to POSIX, sigwait() is guaranteed to work as expected
> only if all other threads in the program block the signals waited for
> (otherwise, the signals could be delivered to other threads than the one
> doing sigwait(), which would make sigwait() useless). In this particular
> case, the problem described in this question does not appear. "
> De aici rezulta ca noi nu trebuie sa facem nimic inainte sa apelam
> "sigwait", pentru ca functia o sa faca singura blocarea semnalelor pe care
> le asteapta prin instalarea de handlere dummy pentru ele ...
>
> ------------------------------
>
> cum e bine ? ;;)
>

In pagina de manual a functiei sigwait este specificat ca semnalele
pentru care se face sigwait trebuie intr-adevar sa fie blocate inainte
de apelul functiei, altfel comportamentul ei este nedefinit.

Iulian


More information about the so mailing list