Controlador de señal que accede a la estructura de datos de la cola (¿condición de carrera?)

Actualmente estoy escribiendo un pequeño shell en C ++.

Jobs y los PID asociados con ellos se almacenan en una cola de indicadores de trabajo(job *). Cuando se ejecuta un nuevo trabajo, se agrega información al respecto a la cola. Dado que se pueden manejar múltiples trabajos simultáneamente y se pueden ingresar nuevos trabajos en la consola del shell en cualquier momento, tengo un controlador de señal para esperar en los trabajos que se terminan.

Cuando un trabajo finaliza, necesito eliminar su información de la cola de trabajos activos y moverlo a mi deque de trabajos finalizados. Sin embargo, es posible que el nuevo trabajo de un usuario se agregue a la cola cuando se detiene otro trabajo.

En tal caso, suinserta operación de la cola @ se suspendería y se llamaría a mi controlador de señal, que realizaría supop operación.

Estoy tratando de entender cómo puedo resolver esta posible condición de carrera, ya que imagino que puede ocurrir corrupción durante este proceso. No puedo usar un mutex, ya que ocurriría un punto muerto si el proceso padre interrumpido está usando la cola en ese momento.

Veo información sobreC++11 ser capaz de realizar operaciones atómicas según lo declarado por el usuario, junto con información sobre los tasklets. Sin embargo, no estoy seguro de si son relevantes para mi pregunta.

Interesantemente suficiente, un ejemplo de shell (MSH -http: //code.google.com/p/mini-shell-msh) que estoy usando como referencia no parece hacer ningún manejo de tales condiciones. El controlador de señal modifica inmediatamente la lista de trabajos, junto con la consola principal. ¿Quizás hay algo que estoy pasando por alto aquí?

Como siempre, todos los comentarios son apreciados.

Respuestas a la pregunta(2)

Su respuesta a la pregunta