Junior — Middle
Comment peut-on prévenir un blocage mutuel de deux threads dans une application multithread?
sobes.tech IA
Réponse de l'IA
Un blocage mutuel (deadlock) se produit lorsque deux ou plusieurs threads attendent indéfiniment la libération de ressources par l'autre. Pour éviter les deadlocks, on peut utiliser les approches suivantes :
- Éviter les blocages imbriqués : minimiser le nombre de ressources acquises simultanément.
- Ordre d'acquisition des ressources : toujours acquérir les ressources dans le même ordre dans tous les threads.
- Utiliser des délais d'attente (timeouts) : lors de la tentative d'acquisition d'un verrou, utiliser un timeout pour éviter une attente infinie.
- Utiliser des primitives de synchronisation de niveau supérieur : par exemple, du paquet
java.util.concurrenten Android, qui réduit la probabilité de deadlock.
Exemple d'acquisition ordonnée des ressources :
synchronized (resourceA) {
synchronized (resourceB) {
// travail avec les ressources
}
}
Si tous les threads respectent l'ordre d'abord resourceA, puis resourceB, il n'y aura pas de deadlock.