Sobes.tech
Junior — Middle

Hoe kan men een onderlinge blokkering van twee threads in een multithread-toepassing voorkomen?

sobes.tech AI

Antwoord van AI

Een deadlock treedt op wanneer twee of meer threads onbepaalde tijd wachten op het vrijgeven van bronnen door elkaar. Om deadlocks te voorkomen, kunnen de volgende benaderingen worden gebruikt:

  • Vermijd geneste locks: minimaliseer het aantal bronnen dat gelijktijdig wordt verworven.
  • Orden de verwerving van bronnen: verwerven altijd de bronnen in dezelfde volgorde in alle threads.
  • Gebruik timeouts: bij het proberen te verwerven van een lock, gebruik een timeout om oneindig wachten te voorkomen.
  • Gebruik hogere niveau synchronisatie primitiven: bijvoorbeeld uit het java.util.concurrent pakket in Android, die de kans op deadlock verkleinen.

Voorbeeld van geordende verwerving van bronnen:

synchronized (resourceA) {
    synchronized (resourceB) {
        // werken met de bronnen
    }
}

Als alle threads de volgorde eerst resourceA, dan resourceB volgen, zal er geen deadlock optreden.