Seguridad en hilos

La seguridad en hilos es un concepto de programación aplicable en el contexto de los programas multihilos. Una pieza de código es segura en cuanto a los hilos si funciona correctamente durante la ejecución simultánea de múltiples hilos. En particular, debe satisfacer la necesidad de que múltiples hilos accedan a los mismos datos compartidos, y la necesidad de que una pieza compartida de datos sea accedida por solo un hilo en un momento dado.

La seguridad en hilos es un desafío clave en la programación multihilos. Antes sólo concernía al programador del sistema operativo pero desde los últimos 1990s ha llegado a ser un asunto común. En un programa multihilos, varios threads se ejecutan simultáneamente en un espacio de direcciones compartido. Cada hilo tiene acceso a virtualmente toda la memoria de cada uno de los otros threads. Así el flujo de control y la secuencia de los accesos a datos a menudo tienen poca relación de lo que sería razonable esperar mirando el texto del programa. Thread-safety es una propiedad necesaria para minimizar el comportamiento inesperado restableciendo algunas de las correspondencias entre el flujo de control actual y el texto del programa.

Determinando la seguridad del hilo

No es fácil determinar si una pieza de código es segura en cuanto a los hilos o no. Sin embargo, hay varios indicadores que sugieren la necesidad de un examen cuidadoso para determinar si es inseguro:

  • acceder a las variables globales o al heap
  • asignar/liberar recursos que tienen límites globales (ficheros, procesos y subprocesos, etc.)
  • accesos indirectos a través de handle o punteros
  • cualquier efecto co-lateral visible (por ejemplo, acceso a variables volátiles en el lenguaje de programación C)

Una subrutina tiene seguridad en hilos, y por tanto es reentrante, si sólo usa variables de la pila, depende sólo de los argumentos que le pasen, y sólo llama a otras subrutinas con propiedades similares. A esto a veces se le llama "función pura" y se parece mucho a una función matemática. No todas las funciones reentrantes son thread-safe.

Other Languages
العربية: سلامة الخيوط
English: Thread safety
français: Thread safety
italiano: Thread safety
한국어: 스레드 안전
português: Thread safety
русский: Thread-safety
中文: 线程安全