Estoy en una situación en la que necesito leer un árbol de búsqueda binaria (BST) dentro de un manejador de señal (SIGSEGV controlador de señal, que según mi conocimiento es por subproceso base). El BST puede ser modificado por los otros hilos en la aplicación.Lectura de datos compartidos dentro de un controlador de señal
Ahora que un manejador de señal no puede usar semáforos, mutexes etc. y por lo tanto no puede acceder a los datos compartidos, ¿Cómo resuelvo este problema? Tenga en cuenta que mi aplicación es multiproceso y se ejecuta en un sistema multinúcleo.
Intentaré realmente, realmente difícil, pensar en una forma de no leer datos compartidos en ese manejador de señal. – dbeer
Para enfatizar el punto de @dbeer, en un manejador de señal generalmente no debe hacer nada que bloqueará o generará otras señales, o cualquier operación prolongada. Un manejador de señal debe ser pequeño, rápido y corto. –
Quizás me falta algo, pero si solo los hilos de su programa acceden a la memoria compartida (sin otras interrupciones y excepciones), ¿por qué no podría usar un semáforo (si el buen estilo es una pregunta diferente)? Si un hilo accede a la región crítica, la bloquea, se pone a dormir por otro hilo, el semáforo sigue bloqueado para el otro hilo y, finalmente, su hilo inicial se programará para acceder de nuevo. Dejando a un lado las razones de rendimiento, no veo peligro de corrupción de datos ni estancamiento del sistema. – gnometorule