Thread-Safety

Thread-Safety

Thread-Safety

Thread-safety (Seguridad en hilos) es un concepto de programación de computadores aplicable en el contexto de los programas multi-threaded. Una pieza de código es thread-safe si funciona correctamente durante la ejecución simultánea de múltiples threads. En particular, debe satisfacer la necesidad de que múltiples threads accedan a los mismos datos compartidos, y la necesidad de que una pieza compartidad de datos sea accedida por solo un thread en un momento dado.

Thread-safety es un desafío clave en la programación multi-threaded. 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 multi-threaded, varios threads se ejecutan simultáneamente en un espacio de direcciones compartido. Cada thread 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 re-estableciendo algunas de las correspondencias entre el flujo de control actual y el texto del programa.

Contenido

Determinando la seguridad del thread

No es fácil determinar si una pieza de código es thread-safe o no. Sin embargo, hay varios indicadores que sugieren la necesidad de examinación cuidadosa para ver si esto es inseguro:

  • acceder a las variables globales o al heap
  • asignar/liberar recursos que tienen limites globales (ficheros, procesos y subprocesos, etc.)
  • accesos indirectos a través de handle o punteros
  • cualquier efecto co-lateral visible (e.g., acceso a variables volatile en el lenguaje de programación C)

Una subrutina es reentrante, y por tanto thread-safe, si sólo usa variables de la pila, depende solo 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.

Consiguiendo la seguridad del thread

Hay unas pocas maneras de conseguir thread-safety:

  • Código reentrante: Básicamente, escribir código de tal manera que pueda ser interrumpido durante una tarea, ser ejecutado (reentrado) de nuevo para realizar otra tarea, y después continuar con su tarea original. Esto normalmente incluye guardar la información de estado en variables locales, en lugar de usar variables static o variables globales.
  • Exclusión mutua: El Acceso a los datos compartidos es serializado usando mecanismos que aseguran que sólo un thread está accediendo a los datos compartidos al mismo tiempo. Se requiere gran cautela si una pieza de código accede a múltiples piezas compartidas de datos - los problemas incluyen condición de carrera, deadlocks, livelocks, inanición de recursos(starvation), y otros males enumerados en los libros de texto de los sistemas operativos.
  • Almacenamiento thread-local: Variables están localizadas de manera que cada thread tiene su propia copia privada. Las variables retienen sus valores a través de la subrutina y otros límites de código, y el código al cual acceden podría no ser reentrante, pero dado que son locales a cada hilo, son thread-safe.
  • Operación atómica: Los datos compartidos son accedidos usando Atomicidad la cual no puede ser interrumpida por otros threads. ESto normalmente necesita usar instrucciones especiales del lenguaje máquina, las cuales podrían estar disponibles en una biblioteca de runtime. Dado que las operaciones son atómicas, los datos compartidos están siempre guardados en un estado válido, sin importar el orden en que los threads acceden. Atomicidad forma la base de muchos mecanismos de bloqueo de thread.

Un idioma de uso general combina estos acercamientos:

  • hacer cambios a una copia privada de los datos compartidos y entonces actualizad atómicamente los datos compartidos desde la copia privada. Así, la mayoría del código es concurrente, y se pierde poco tiempo en la Serialización.

Véase también

Enlaces externos

Obtenido de "Thread-Safety"

Wikimedia foundation. 2010.

Игры ⚽ Поможем сделать НИР

Mira otros diccionarios:

  • Thread safety — is a computer programming concept applicable in the context of multi threaded programs. A piece of code is thread safe if it functions correctly during simultaneous execution by multiple threads. In particular, it must satisfy the need for… …   Wikipedia

  • Thread-safety — Потоковая безопасность (англ. thread safety) это концепция программирования, применимая к многопоточным программам. Код потоково безопасный, если он функционирует корректно при использовании из нескольких потоков одновременно. В частности,… …   Википедия

  • Thread (computer science) — This article is about the concurrency concept. For the multithreading in hardware, see Multithreading (computer architecture). For the form of code consisting entirely of subroutine calls, see Threaded code. For other uses, see Thread… …   Wikipedia

  • Thread pool pattern — In the thread pool pattern in programming, a number of threads are created to perform a number of tasks, which are usually organized in a queue. Typically, there are many more tasks than threads. As soon as a thread completes its task, it will… …   Wikipedia

  • Thread-Sicherheit — Threadsicherheit (engl. thread safety) ist eine Eigenschaft von Softwarekomponenten und hat eine wichtige Bedeutung in der Softwareentwicklung. Sie besagt, dass eine Komponente gleichzeitig von verschiedenen Programmbereichen mehrfach ausgeführt… …   Deutsch Wikipedia

  • Thread-safe — Threadsicherheit (engl. thread safety) ist eine Eigenschaft von Softwarekomponenten und hat eine wichtige Bedeutung in der Softwareentwicklung. Sie besagt, dass eine Komponente gleichzeitig von verschiedenen Programmbereichen mehrfach ausgeführt… …   Deutsch Wikipedia

  • Safety wire — Safety wiring of two pairs of drilled head bolts Safety wire or lockwire is common in the aircraft and racing industries as an extra precaution to keep vital fasteners from unintentionally loosening and parts from falling off due to vibration or… …   Wikipedia

  • Safety — (Roget s Thesaurus) < N PARAG:Safety >N GRP: N 1 Sgm: N 1 safety safety security surety impregnability Sgm: N 1 invulnerability invulnerability invulnerableness &c.???adj. Sgm: N 1 danger past danger past danger over Sgm …   English dictionary for students

  • thread — thread1 [θred] n ▬▬▬▬▬▬▬ 1¦(for sewing)¦ 2¦(ideas)¦ 3 pick up the thread(s) 4¦(internet)¦ 5¦(line)¦ 6¦(on a screw)¦ 7 threads ▬▬▬▬▬▬▬ [: Old English; Origin: thrAd] 1.) ¦(FOR SEWING)¦ …   Dictionary of contemporary English

  • thread — 1 noun 1 COTTON/SILK ETC (C, U) a long thin string of cotton, silk etc used to sew or weave cloth: Have you got a needle and thread? 2 IDEAS (singular) the connection between the different parts of an explanation, story etc: a common thread… …   Longman dictionary of contemporary English

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”