Race Condition
Een race condition treedt op wanneer een software-programma afhankelijk is van de timing van een of meer processen om correct te functioneren. Als een thread op een onverwacht moment wordt uitgevoerd of eindigt, kan dit onvoorspelbaar gedrag veroorzaken, zoals onjuiste uitvoer of een deadlock van een programma.
De meeste softwareprogramma's zijn multithreaded, wat betekent dat ze meerdere threads tegelijk kunnen verwerken. Een goed geprogrammeerde applicatie zorgt ervoor dat de resultaten van elke thread in de verwachte volgorde worden verwerkt. Als een programma afhankelijk is van threads die in een onvoorspelbare volgorde worden uitgevoerd, kan er een race condition optreden.
Een eenvoudig voorbeeld is een logische poort die booleaanse waarden verwerkt. De AND-logische poort heeft twee ingangen en één uitgang. Als de ingangen A en B waar zijn, produceert de AND-poort TRUE. Als een of beide ingangen onwaar zijn, produceert de poort FALSE. Er kan een race condition optreden als een programma het resultaat van de logische poort controleert voordat de variabelen A en B zijn geladen. Het juiste proces zou zijn:
- Variabele A laden
- Variabele B laden
- Het resultaat van de AND-logische poort controleren
Een onjuiste volgorde zou zijn:
- Variabele A laden
- Het resultaat van de AND-logische poort controleren
- Variabele B laden
Het resultaat van het tweede bovenstaande voorbeeld kan hetzelfde zijn als dat van het eerste voorbeeld, maar dat hoeft niet. Zo kan variabele B zowel voor als na het laden FALSE zijn, waardoor het resultaat niet verandert. Als A FALSE is, maakt het niet uit of B TRUE of FALSE is. Als A en B echter beide TRUE zijn, zou het resultaat TRUE moeten zijn. Als variabele B wordt geladen nadat het resultaat van de logische poort is gecontroleerd, ontstaat het onjuiste resultaat FALSE.
De inconsistente uitvoer die door race conditions wordt veroorzaakt, kan bugs veroorzaken die moeilijk te detecteren zijn. Programmeurs kunnen deze problemen voorkomen door ervoor te zorgen dat threads in een consistente volgorde worden verwerkt.
Test je kennis