Maison > développement back-end > Golang > le corps du texte

Quels sont les mécanismes de synchronisation dans la programmation simultanée des fonctions Golang ?

WBOY
Libérer: 2024-04-17 17:30:01
original
419 Les gens l'ont consulté

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.

Quels sont les mécanismes de synchronisation dans la programmation simultanée des fonctions Golang ?

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
}
Copier après la connexion

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)
    }
}
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal