Quand choisir un mutex ou un canal
Golang fournit à la fois sync.Mutex et des canaux pour la programmation simultanée, présentant aux développeurs une décision de quel outil utiliser dans différents scénarios.
Mutex vs. Canal
Utilisation d'un Mutex
Les mutex sont idéaux pour les situations où :
Exemples
1. Compteur simple :
Les mutex peuvent être utilisés pour implémenter un compteur simple qui garantit qu'une seule goroutine incrémente le compteur à la fois.
import "sync" var counter int var m sync.Mutex func incrementCounter() { m.Lock() counter++ m.Unlock() }
2. Jeu de ping-pong :
Alors que les canaux sont souvent utilisés pour les jeux de ping-pong, les Mutex peuvent obtenir la même fonctionnalité en gardant l'accès à l'objet balle partagé.
import "sync" type Ball struct { hits int } var ball Ball var m sync.Mutex func player1() { for { m.Lock() ball.hits++ fmt.Println("Player 1:", ball.hits) m.Unlock() } }
3. Cache simple :
Les mutex peuvent être utilisés pour implémenter un cache simple avec un accès thread-safe à son contenu.
import "sync" type Cache struct { m map[string]interface{} mu sync.Mutex } func (c *Cache) Get(key string) interface{} { c.mu.Lock() defer c.mu.Unlock() return c.m[key] }
Choisir entre un mutex et un canal
Le choix entre un mutex et un canal dépend des exigences spécifiques de la tâche. Les mutex conviennent aux scénarios dans lesquels il est primordial d'éviter les conditions de concurrence critique et de garantir un accès sécurisé aux données partagées. Les canaux, en revanche, excellent dans la communication et le partage de données entre goroutines.
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!