Dans la programmation simultanée de Go, le mécanisme de synchronisation est la clé pour garantir l'intégrité des données partagées. Il fournit une variété de types intégrés, notamment : Mutex (Mutex) : fournit un accès exclusif aux données partagées ; verrouillage en lecture-écriture : permet à plusieurs goroutines de lire en même temps mais une seule goroutine peut écrire des données. pour Coordonner l'attente et le réveil parmi les goroutines.
Mécanisme de synchronisation dans la programmation simultanée de la fonction Go
Dans la programmation simultanée de Go, lorsque plusieurs goroutines (threads légers dans Golang) exploitent des données partagées en même temps, un mécanisme de synchronisation est nécessaire pour garantir l'intégrité des données. . Go fournit une variété de types de synchronisation intégrés pour coordonner l'accès aux goroutines.
1. Mutex
Mutex (verrouillage mutex) est le mécanisme de synchronisation le plus basique, qui fournit un accès exclusif aux données partagées. Une seule goroutine à la fois peut contenir le mutex, garantissant ainsi les opérations atomiques sur les données partagées.
import ( "fmt" "sync" ) func main() { var count int var mu sync.Mutex for i := 0; i < 1000; i++ { go func(i int) { mu.Lock() count++ mu.Unlock() }(i) } fmt.Println("Count:", count) // 输出:1000 }
2. Verrouillage en lecture-écriture
Le verrouillage en lecture-écriture est un mécanisme de synchronisation avancé qui permet à plusieurs goroutines de lire des données partagées en même temps, mais une seule goroutine peut écrire des données partagées à la fois. Cela améliore les performances de concurrence tout en garantissant l’intégrité des données.
import ( "fmt" "sync" ) func main() { var count int var rw sync.RWMutex for i := 0; i < 1000; i++ { go func(i int) { rw.RLock() fmt.Println("Reading:", count) rw.RUnlock() }(i) go func(i int) { rw.Lock() count++ fmt.Println("Writing:", count) rw.Unlock() }(i) } }
3. Variable de condition
La variable de condition (cond) est utilisée pour coordonner l'attente et le réveil entre les goroutines. Lorsqu'une goroutine remplit une condition spécifique, elle peut réveiller les goroutines en attente de cette condition.
import ( "fmt" "sync" ) func main() { var cond sync.Cond var signal bool sync.Mutex.Lock(&l) for !signal { cond.Wait(&l) } // ... 执行需要信号的代码 ... sync.Mutex.Unlock(&l) }
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!