Condición de carrera en un circuito lógico. ∆t1 y ∆t2 representan el retardo de propagación de los elementos lógicos. Cuando el valor de entrada (A) cambia, el circuito genera en la salida un pico de duración (∆t1 + ∆t2) − ∆t2 = ∆t1.

Condición de carrera o condición de secuencia (del inglés race condition) es una expresión usada en electrónica y en programación. Cuando la salida o estado de un proceso es dependiente de una secuencia de eventos que se ejecutan en orden arbitrario y van a trabajar sobre un mismo recurso compartido, se puede producir un error cuando dichos eventos no llegan (se ejecutan) en el orden que el programador esperaba. El término se origina por la similitud de dos procesos compitiendo en carrera por llegar antes que el otro, de manera que el estado y la salida del sistema dependerán de cuál llegó antes, pudiendo provocarse inconsistencias y comportamientos impredecibles y no compatibles con un sistema determinista. En determinados escenarios, la gran velocidad de ejecución de un hilo no es suficiente para garantizar que operaciones concurrentes den resultados esperados. Se pueden dar condiciones de carrera a nivel de proceso o incluso a nivel de sistema cuando éste está distribuido.

A modo de ejemplos de alto nivel: un sistema mal diseñado de reserva de entradas podría ocasionar que dos usuarios accediendo desde la web a la vez, reserven legítimamente la misma butaca. O un sistema de conteo automático de plazas libres de una plaza de estacionamiento en sus barreras de entrada y salida de vehículos podría indicar que está totalmente vacío cuando realmente está lleno (o viceversa). De igual forma, dos personas ingresando y retirando efectivo a la vez de una misma cuenta bancaria podrían ver su saldo incrementado o por el contrario su ingreso realizado pero no materializado en saldo disponible. Si bien son situaciones que pudieran ser improbables, son posibles y pueden ser y han de ser evitadas en el desarrollo de software.

Si los procesos que están en condición de carrera son correctamente sincronizados, todo debería funcionar correctamente, por lo que el resultado será el esperado. Múltiples procesos se encuentran en condición de carrera si el resultado de los mismos depende del orden de su llegada, y si no son correctamente sincronizados puede producirse una corrupción de datos que puede derivar incluso en un problema de seguridad del sistema capaz de ser explotado de forma malintencionada. Análogamente, en circuitos electrónicos se da una condición de carrera cuando la salida de un sistema o subsistema depende del orden en que se hayan mandado las solicitudes de activación o desactivación de sus componentes.

La naturaleza imprevisible de las condiciones de carrera da lugar en muchas ocasiones a la aparición de bugs de manera repentina que normalmente no ocurren durante el testeo de un software. Además, pueden ser difícilmente trazables, difícilmente replicables de manera controlada o visibles incluso con herramientas de depuración de programas.

Véase también

editar

Enlaces externos

editar

📚 Artikel Terkait di Wikipedia

María Urquhart

439-443. Tansini, L., Urquhart, M. E., & Viera, O. (2001). Comparing assignment algorithms for the Multi-Depot VRP. Reportes Técnicos 01-08. Agencia Nacional

WUBG

2003. Consultado el 19 de julio de 2015.  «Application for Consent to Assignment of Broadcast Station Construction Permit or License». CDBS Public Access

Búsqueda de patrones

Pattern Matching. Python Reference Manual, chapter 6.3 Assignment statements. The Pure Programming Language, chapter 4.3: Patterns Gimpel, J. F. 1973. A

Condiciones Yoda

Operators — The Swift Programming Language (Swift 5.6)». docs.swift.org. Apple. Consultado el 30 de enero de 2022.  «disallow assignment operators in conditional

Toolbox

instruction = 'up' | 'down' | 'left' | 'right' | 'info' | assignment | repeat | if | while assignment = variable, '=', expression repeat = 'repeat', natural

Yellowjackets (serie de televisión)

noviembre de 2021). «Warren Kole Exclusive Interview Yellowjackets». Assignment X (en inglés). Consultado el 6 de diciembre de 2021.  Thompson, Avery

Investigación de operaciones

Method for the Assignment Problem," Naval Research Logistics Quarterly, 1–2, 1955, 83–97 H. W. Kuhn, A. W. Tucker, "Nonlinear Programming," pp. 481–492

Python

Durante su estancia en CNRI, van Rossum lanzó la iniciativa Computer Programming for Everybody (CP4E), con el fin de hacer la programación más accesible