La programación Linux Interfaz libro ha mencionado un método para tratar con señales asíncronas en un multi programa de roscado:trata de señales asíncronas en multihilo Programa
- Todas las roscas bloquear todas las señales asíncronas que el proceso de podría recibir. La forma más sencilla de hacer es bloquear las señales en el hilo principal antes de crear cualquier otra cadena . Cada subproceso creado posteriormente heredará una copia de la máscara de señal del subproceso principal .
- crea una única secuencia dedicada que acepta señales entrantes usando
sigwaitinfo()
,sigtimedwait()
osigwait()
.La ventaja de este enfoque es que señales generadas de forma asíncrona son recibieron de forma sincrónica. Como acepta señales entrantes, la secuencia dedicada puede modificar de forma segura las variables compartidas (bajo control mutex) y llamar a funciones no asíncronas. También puede variables de condición de señal, y emply otro hilo y comunicación de proceso y mecanismos de sincronización.
Ahora las preguntas:
- cuando kernel quiere entregar señales que elegir uno de los hilos dentro de proceso arbitrario. desde donde puede saber para entregar la señal al hilo dedicado?
- pthread API es funciones no seguras para aync. Entonces, ¿cómo podemos usarlos dentro de manejador de señal?
Sigaction no se usa para bloquear señales, vea sigprocmask y pthread_sigmask. –
@ToddFreed: Créalo o no, eso es realmente lo que quise decir ... Corregido; Gracias – Nemo