Sobes.tech
Junior — Middle

Come si può prevenire un deadlock tra due thread in un'applicazione multithread?

sobes.tech AI

Risposta dell'AI

Il deadlock si verifica quando due o più thread aspettano indefinitamente che le risorse vengano rilasciate l'uno dall'altro. Per prevenire i deadlock, si possono usare i seguenti approcci:

  • Evitare blocchi annidati: minimizzare il numero di risorse acquisite contemporaneamente.
  • Ordinare l'acquisizione delle risorse: acquisire sempre le risorse nello stesso ordine in tutti i thread.
  • Usare timeout: durante il tentativo di acquisire un lock, usare un timeout per evitare attese infinite.
  • Utilizzare primitive di sincronizzazione di livello superiore: ad esempio, dal pacchetto java.util.concurrent in Android, che riducono la probabilità di deadlock.

Esempio di acquisizione ordinata delle risorse:

synchronized (resourceA) {
    synchronized (resourceB) {
        // lavoro con le risorse
    }
}

Se tutti i thread seguono l'ordine prima resourceA, poi resourceB, il deadlock non si verificherà.