seguridad del hilo


La seguridad de subprocesos es un concepto de programación informática aplicable al código de subprocesos múltiples . El código seguro para subprocesos solo manipula las estructuras de datos compartidas de una manera que garantiza que todos los subprocesos se comporten correctamente y cumplan con sus especificaciones de diseño sin interacciones no deseadas. Hay varias estrategias para crear estructuras de datos seguras para subprocesos. [1] [2]

Un programa puede ejecutar código en varios subprocesos simultáneamente en un espacio de direcciones compartido donde cada uno de esos subprocesos tiene acceso a prácticamente toda la memoria de todos los demás subprocesos. La seguridad de subprocesos es una propiedad que permite que el código se ejecute en entornos multiproceso al restablecer algunas de las correspondencias entre el flujo de control real y el texto del programa, mediante la sincronización .

Las bibliotecas de software pueden proporcionar ciertas garantías de seguridad de subprocesos. Por ejemplo, se puede garantizar que las lecturas simultáneas sean seguras para subprocesos, pero es posible que las escrituras simultáneas no lo sean. Si un programa que usa una biblioteca de este tipo es seguro para subprocesos depende de si usa la biblioteca de una manera consistente con esas garantías.

Las garantías de seguridad de subprocesos generalmente también incluyen pasos de diseño para prevenir o limitar el riesgo de diferentes formas de interbloqueos , así como optimizaciones para maximizar el rendimiento simultáneo. Sin embargo, no siempre se pueden dar garantías sin interbloqueos, ya que los interbloqueos pueden ser causados ​​por devoluciones de llamadas y violaciones de capas arquitectónicas independientes de la propia biblioteca.

La segunda clase de enfoques está relacionada con la sincronización y se utiliza en situaciones en las que no se puede evitar el estado compartido:

En el lenguaje de programación C , cada hilo tiene su propia pila. Sin embargo, una variable estática no se mantiene en la pila; todos los subprocesos comparten acceso simultáneo a él. Si varios subprocesos se superponen mientras se ejecuta la misma función, es posible que un subproceso cambie una variable estática mientras que otro está a mitad de camino para verificarla. Este error lógico difícil de diagnosticar , que puede compilarse y ejecutarse correctamente la mayor parte del tiempo, se denomina condición de carrera . Una forma común de evitar esto es usar otra variable compartida como "bloqueo" o "mutex" ( de exclusión mutua ).