Sobes.tech
Junior — Middle

Cos'è un deadlock di risorse e in quali situazioni si verifica nei sistemi?

sobes.tech AI

Risposta dell'AI

Il deadlock (interblocco) è una situazione nei sistemi multitasking in cui due o più processi (o thread) si bloccano reciprocamente per sempre, aspettando di liberare risorse occupate dall'altro.

Si verifica quando tutte e quattro le condizioni sono soddisfatte contemporaneamente:

  1. Esclusione mutua — una risorsa può essere presa in possesso da un solo processo alla volta.
  2. Ritenzione e attesa — un processo mantiene una risorsa e ne aspetta un'altra.
  3. Impossibilità di liberazione forzata — una risorsa non può essere sottratta a un processo finché non la libera volontariamente.
  4. Attesa ciclica — esiste un ciclo di processi, ognuno dei quali aspetta una risorsa detenuta dal successivo nel ciclo.

Esempio: il processo A ha preso la risorsa 1 e aspetta la risorsa 2, mentre il processo B ha preso la risorsa 2 e aspetta la risorsa 1 — entrambi sono bloccati per sempre.

In iOS e altri sistemi, i deadlock si verificano spesso a causa di un uso scorretto della sincronizzazione, ad esempio, quando si acquisiscono più lock in ordine diverso.

Per prevenire i deadlock si utilizzano:

  • ordinamento nell'acquisizione delle risorse;
  • timeout di attesa;
  • evitare di mantenere risorse mentre si aspetta altre;
  • utilizzo di meccanismi di sincronizzazione specializzati.