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.concurrentin 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à.