Deseo saber si es una buena idea acceder a los datos compartidos desde un manejador de señal. Me refiero a considerar el escenario de sistema de procesos múltiples y sistema multiproceso con un solo proceso. En el sistema de procesos múltiples, digamos que los procesos manejan una señal particular y actualizan cierta variable o memoria compartida por los procesos. ¿Puedo hacer eso desde el manejador de señales en sí?Acceso a datos compartidos desde un controlador de señal
Sin embargo, en el caso de los hilos que usan pthreads, no creo que sea factible. http://maxim.int.ru/bookshelf/PthreadsProgram/htm/r_40.html. Como se indica en este artículo, han mencionado que no es segura la señal asíncrona y han sugerido usar sigwait para eso. No soy el motivo por el cual no es segura la señal asíncrona. Quiero decir, digamos que manejo una señal por un hilo y está en el enrutamiento del manejador de señal. Adquiero un candado en la memoria compartida para actualizarlo. Mientras tanto, llega otra señal del mismo tipo y otro subproceso responsable de su manejo ejecuta nuevamente el manejador de señal. Aquí, el manejador de señal es el mismo para el proceso, pero se llama tiempo múltiple. La segunda vez, no puede ver el bloqueo y las actualizaciones/anula los datos. ¿Es este el problema con los manejadores de señal multiproceso que usan datos compartidos?
Estoy un poco confundido, en los sistemas de procesos múltiples, tengo una copia del manejador de señal para cada proceso. Pero en el sistema multiproceso, hay una sola copia del manejador de señal utilizada por los hilos múltiples, ¿no es así? Entonces, cuando llegan varias señales del mismo tipo y tenemos dos hilos que son responsables de su manejo, intenten manejarlo, ¿entonces ambos intentarán ejecutar el mismo código de controlador? ¿Cómo encaja todo?
¿Cómo se imagina que el caso estándar de 'pthread_mutex_lock()' se llama al mismo tiempo por varios hilos que se resuelven? :) (dado este caso de uso es exactamente por qué tenemos mutexes, es decir, smth pide aclaraciones aquí, parece) – mlvljr
@mlvljr: Eso es diferente - con las señales, podría ser el * mismo * hilo llamando 'pthread_mutex_lock' dos veces a al mismo tiempo (bastante menos al mismo tiempo, pero una llamada se ejecuta parcialmente cuando se inicia otra en un manejador de señal). –
Además, ¿qué pasa si ese hilo * ya posee * el mutex cuando se recibe una señal que hace que intente adquirir el mutex (excluyendo los mutex recursivos). –