Situació de competició
Situació de competició és una expressió utilitzada en electrònica i en programació concurrent. Prové de l'anglès race condition (tot i que seria millor parlar d'estat de competició, igual que es parla d'estat d'espera). Una situació de competició descriu l'error que es produeix en programes o circuits lògics quan no han estat dissenyats adequadament per a la seva execució simultània amb altres.
Un exemple típic és l'interbloqueig que es produeix quan dos processos estan esperant que l'altre faci una acció. Com que els dos estan esperant, cap arriba a realitzar l'acció que l'altre espera.
Aquest tipus d'errors de programació poden ser aprofitats per exploits locals per a vulnerar els sistemes.
Riscos en la concurrència cooperativa
[modifica el codi]En entorns de programació asíncrona d'un sol fil, com els gestionats per un bucle d'esdeveniments, les situacions de competició no es produeixen a nivell d'instrucció de CPU, sinó en els anomenats punts de suspensió. Aquests punts corresponen a les instruccions marcades amb la paraula clau await, on la tasca actual cedeix el control per esperar una operació d'entrada/sortida.[1]
El risc d'inconsistència apareix quan una corrutina accedeix a un estat compartit mutable, se suspèn, i una altra corrutina modifica aquest mateix estat abans que la primera reprengui l'execució. Tot i que el codi pot semblar seqüencial, l'atomicitat lògica es trenca en cada interrupció del bucle d'esdeveniments. Per mitigar aquests errors, s'utilitzen diverses estratègies de sincronització:
- Panys asíncrons (Locks): Garanteixen l'exclusió mútua en seccions crítiques que contenen operacions d'espera.
- Immutabilitat: L'ús d'estructures de dades que no poden ser modificades un cop creades elimina la possibilitat de canvis inesperats durant la suspensió de la tasca.
- Disseny sense estat compartit: L'arquitectura basada en el pas de missatges entre tasques independents evita la dependència de variables globals, reduint la complexitat de la sincronització.
Vegeu també
[modifica el codi]Enllaços externs
[modifica el codi]- Starvation and Critical Race Analyzers for Ada
- Article "Secure programmer: Prevent race conditions-Resource contention can be used against you" by David A. Wheeler
- Interview with Dmitriy Vyukov - the author of Relacy Race Detector (RRD)
- ↑ Fowler, Matthew. Python Concurrency with asyncio. Manning Publications, 2022, p. 268-272. ISBN 9781617298660.