Multicore en synchronisatie

Welk voorbeeld van een deadlock is juist?

  1. AThread 1 houdt lock A vast en wacht op lock B, en thread 2 houdt lock B vast en wacht op lock A
  2. BTwee threads wijzigen dezelfde variabele zonder synchronisatie, waardoor de waarde wordt verstoord
  3. CEén thread neemt een lock en geeft die direct weer vrij
Antwoord en toelichting tonen

Antwoord: A. Thread 1 houdt lock A vast en wacht op lock B, en thread 2 houdt lock B vast en wacht op lock A

Een deadlock is een toestand waarin meerdere threads elk een resource vasthouden en op de resource van een andere thread wachten, zodat niemand verder kan. In het voorbeeld wacht thread 1 tot B vrij is en thread 2 tot A vrij is, maar beide geven hun eigen lock niet vrij, zodat ze voor altijd stilstaan. Omdat zonder CPU-gebruik wordt gestopt, lijkt de verwerking van buitenaf vastgelopen.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Multicore en synchronisatie

  1. Welke methode is de meest gangbare om deadlock te voorkomen in een programma met meerdere locks?
  2. Wat legt een geheugenconsistentiemodel vast?
  3. Welke uitleg over sequentiële consistentie (sequential consistency) is juist?
  4. De bovenstaande twee threads worden tegelijk op verschillende cores uitgevoerd (er is geen herordening door de compiler). Welke uitkomst treedt niet op bij sequentiële consistentie, maar kan wel optreden bij echte CPU's zoals x86?
  5. Welke eigenschap van het geheugenconsistentiemodel van x86 (TSO, Total Store Order) is juist?

Vergelijkingen bij dit onderwerp