Exclusion mutuelle dans les goroutines simultanées : parvenir à l'isolement du code
Dans la programmation simultanée, il est crucial d'avoir des mécanismes en place pour empêcher plusieurs goroutines de s'exécuter le même code simultanément. Cela garantit l'intégrité des données et évite tout comportement inattendu.
Considérez le scénario suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
Ici, pendant que les sections de code entre les marqueurs Do Something s'exécutent, nous voulons empêcher le contrôle de passer à d'autres goroutines. Par exemple, lorsque Routine1 exécute la partie située dans les étoiles, Routine2 et Routine3 doivent être bloquées.
Réaliser une exclusion mutuelle avec WaitGroup
Une approche pour imposer l'exclusion mutuelle consiste à utilisez un sync.WaitGroup. Cependant, cette technique n'est pas applicable dans ce scénario car elle n'a pas la capacité de bloquer les goroutines de manière sélective.
Utiliser les mutex pour l'isolement
Une solution plus efficace consiste à utiliser la synchronisation .Mutex. Un mutex garantit qu'un seul goroutine peut le posséder à un moment donné. Voici comment implémenter l'exclusion mutuelle à l'aide de mutex :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
|
Dans ce code :
En conséquence, les instructions d'impression à l'intérieur de chaque goroutine s'exécuteront une à la fois, garantissant qu'aucune autre goroutine ne pourra accéder à ces lignes jusqu'à ce que la goroutine actuelle a libéré son verrou.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!