Deadlock
Een deadlock is een toestand waarin een programma geen toegang heeft tot een resource die het nodig heeft om door te gaan. Wanneer een actief programma in een deadlock terechtkomt, kan het "vastlopen" of niet meer reageren.
Resources, zoals opgeslagen of gecachte gegevens, kunnen worden vergrendeld wanneer ze worden geopend door een specifiek proces binnen een programma. Door de gegevens te vergrendelen, wordt voorkomen dat andere processen de gegevens voortijdig overschrijven. Als een proces of query toegang nodig heeft tot vergrendelde gegevens, maar het proces dat de gegevens vergrendelt deze niet vrijgeeft, kan er een deadlock optreden.
De volgende situatie veroorzaakt bijvoorbeeld een deadlock tussen twee processen:
- Proces 1 vraagt resource B op bij proces 2.
- Resource B is vergrendeld terwijl proces 2 wordt uitgevoerd.
- Proces 2 heeft resource A van proces 1 nodig om de uitvoering te voltooien.
- Resource A is vergrendeld terwijl proces 1 wordt uitgevoerd.
Het resultaat is dat proces 1 en proces 2 op elkaar wachten totdat de ander klaar is. Omdat geen van beide processen kan doorgaan totdat het andere proces is voltooid, ontstaat er een deadlock.
Deadlocks voorkomen
Ontwikkelaars kunnen deadlocks voorkomen door vergrendelingssituaties in hun programmeerlogica te vermijden. In plaats van twee processen van elkaar afhankelijk te maken, kan de broncode bijvoorbeeld zo worden geschreven dat elke thread wordt voltooid voordat een andere thread de resources ervan nodig heeft. Door ervoor te zorgen dat gegevens toegankelijk zijn wanneer dat nodig is, kunnen programmeurs voorkomen dat hun programma's vastlopen of crashen.
NOTE: Deadlocks kunnen ook optreden wanneer twee of meer query's op een database worden uitgevoerd. Transactionele databases vergrendelen actieve records, waardoor andere query's er geen toegang toe hebben. Als een proces geen toegang heeft tot een vergrendelde record, kan er een deadlock in de database optreden.
Test je kennis