race condition

/ˈreɪs kənˌdɪʃ.ən/zelfstandig naamwoord

Een race condition is een softwarefout waarbij de uitkomst afhangt van de volgorde of timing van handelingen die tegelijk kunnen plaatsvinden. Dezelfde invoer kan daardoor verschillende resultaten geven.

Door een race condition accepteerde de webwinkel twee bestellingen voor het laatste artikel op voorraad.

Software voert vaak meerdere taken naast elkaar uit. Die taken kunnen dezelfde gegevens lezen en aanpassen, bijvoorbeeld de voorraad van een webwinkel. Als hun stappen in een onverwachte volgorde plaatsvinden, kan de uitkomst afhangen van welke taak als eerste is. Dat heet een race condition.

Hoe ontstaat een race condition?

Stel dat er nog één artikel op voorraad is en twee klanten het tegelijk bestellen. Beide aanvragen lezen eerst de voorraadwaarde 1 en besluiten dat het artikel beschikbaar is. Daarna schrijven ze allebei een nieuwe waarde weg. Zonder goede afstemming accepteert de webwinkel zo twee bestellingen voor één artikel.

Een race condition ontstaat niet alleen bij twee programmathreads. Ook afzonderlijke processen, servers of gekoppelde systemen kunnen tegelijk dezelfde gegevens wijzigen. De fout treedt soms maar zelden op, omdat een klein verschil in timing al tot een andere volgorde leidt. Daardoor kan het lastig zijn om de fout tijdens een test opnieuw te laten gebeuren.

Hoe voorkom je timingfouten?

Ontwikkelaars zorgen dat samenhangende handelingen als één geheel worden uitgevoerd, of dat slechts één taak tegelijk gedeelde gegevens mag aanpassen. Dat kan bijvoorbeeld met locks, atomaire bewerkingen of een transactie met passende isolatie in de Woordenboek · In het kortdatabaseEen database is een gestructureerde verzameling gegevens die software kan opslaan, opvragen en wijzigen. Een databasebeheersysteem regelt de toegang tot die gegevens.Lees meer. Een Woordenboek · In het kortmessage queueEen message queue is een wachtrij waarin een softwaresysteem berichten tijdelijk opslaat totdat een ander onderdeel ze verwerkt. De verzender hoeft daarbij niet te wachten tot de ontvanger klaar is.Lees meer kan opdrachten ook in een vaste volgorde laten verwerken.

Welke aanpak past, hangt af van het systeem. De gekozen oplossing moet de toegang tot gedeelde gegevens ordenen zonder onnodig veel werk stil te zetten. Tests met veel gelijktijdige aanvragen en gerichte Woordenboek · In het kortloggingLogging is het vastleggen van gebeurtenissen terwijl software draait. Deze loggegevens helpen ontwikkelaars om de werking van een systeem te volgen en problemen te onderzoeken.Lees meer helpen om race conditions op te sporen.