Maison > développement back-end > Golang > installation de synchronisation golang

installation de synchronisation golang

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-05-16 12:59:40
original
747 Les gens l'ont consulté

Golang est un langage de programmation très populaire ces dernières années. Il a été largement utilisé et a reçu de plus en plus d'attention. Dans Golang, sync est une bibliothèque standard très importante. Elle fournit certaines primitives de synchronisation, telles que le mutex (verrouillage mutex), le verrouillage en lecture-écriture (verrouillage en lecture-écriture), etc., pour aider les développeurs à réduire les conflits lors du verrouillage des ressources. performances de concurrence. Cet article explique comment installer et utiliser la bibliothèque de synchronisation dans Golang.

1. Préparation

Avant d'installer la synchronisation, vous devez installer l'environnement de développement Golang. Si vous ne l'avez pas encore installé, veuillez vous rendre sur le site officiel de Golang (https://golang.org/dl/) pour télécharger le dernier package d'installation de Golang et suivez les instructions pour l'installer.

2. Installez la synchronisation

1. Utilisez la commande go pour installer

Après avoir installé Golang, vous pouvez utiliser la commande go pour installer la bibliothèque de synchronisation. Ouvrez le terminal et exécutez la commande suivante :

go get -u golang.org/x/sync/...

Cette commande téléchargera et installera la dernière version de la bibliothèque de synchronisation et toutes ses bibliothèques dépendantes à partir du code go référentiel. Après avoir exécuté la commande, vous pouvez commencer à utiliser la bibliothèque de synchronisation dans votre projet.

2. Téléchargez le code source

Si une erreur se produit lors de l'exécution de la commande ci-dessus, ou si vous préférez gérer les dépendances manuellement, vous pouvez également télécharger manuellement le code source de la bibliothèque de synchronisation. Ouvrez le terminal et exécutez la commande suivante :

git clone https://github.com/golang/sync.git $GOPATH/src/golang.org/x/sync

Cette commande téléchargera la source depuis le référentiel GitHub du code de la bibliothèque de synchronisation et placez-le dans votre répertoire $GOPATH/src/golang.org/x/sync. Vous pouvez ensuite référencer le code de ce répertoire dans votre propre projet.

3. Utilisez sync

Après avoir installé la bibliothèque de synchronisation, vous pouvez utiliser les fonctions de la bibliothèque de synchronisation dans votre projet Golang. Voici plusieurs cas d'utilisation courants :

1. Utilisez les verrous mutex

sync Le type .Mutex. est une primitive de synchronisation simple mais très utile utilisée lorsque plusieurs threads accèdent à des ressources partagées. Cela garantit qu'une seule goroutine peut accéder à la section de code protégée en même temps. Voici un exemple d'utilisation de base :

package main

import (

"fmt"
"sync"
Copier après la connexion

)

type Counter struct {

mux sync.Mutex // 互斥锁用于保护Counter的值
value int
Copier après la connexion

}

func (c *Counter) Inc() {

c.mux.Lock() // 加锁,确保在修改Counter值的时候不会有其他goroutine同时访问
defer c.mux.Unlock() // 解锁
c.value++
Copier après la connexion

}

func ( c *Counter) Value() int {

c.mux.Lock()
defer c.mux.Unlock()
return c.value
Copier après la connexion

}

func main() {

c := Counter{}
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
    wg.Add(1) // 启动一个goroutine前增加WaitGroup中的计数器
    go func() {
        c.Inc()
        wg.Done() // goroutine结束时减小WaitGroup中的计数器
    }()
}
wg.Wait() // 等待所有goroutine执行完成
fmt.Println(c.Value()) // 输出Counter的值
Copier après la connexion

}

2. Utilisation du verrouillage en lecture-écriture

le typesync.RWMutex est un verrou utilisé pour optimiser le processus de lecture des données, ce qui permet à plusieurs coroutines de lire les ressources partagées en même temps sans conflit. Le verrouillage n'est requis que lors de l'écriture. Voici un exemple d'utilisation de base :

package main

import (

"fmt"
"math/rand"
"sync"
"time"
Copier après la connexion

)

type Cache struct {

data map[string]string
mux sync.RWMutex // 读写锁用于保护Cache
Copier après la connexion

}

func (c *Cache) Get(key string) string {

c.mux.RLock() // 加读锁
defer c.mux.RUnlock() // 解锁
return c.data[key]
Copier après la connexion

}

func (c *Cache) Set(key, value string) {

c.mux.Lock() // 加写锁
defer c.mux.Unlock() // 解锁
c.data[key] = value
Copier après la connexion

}

func main() {

c := Cache{data: make(map[string]string)}
var wg sync.WaitGroup
for i := 0; i < 200; i++ {
    wg.Add(1)
    go func() {
        defer wg.Done()
        key := fmt.Sprintf("%d", rand.Intn(10)) // 随机生成key
        value := fmt.Sprintf("%d", time.Now().Unix()) // 生成当前时间戳作为value
        c.Set(key, value)
        time.Sleep(50 * time.Millisecond) // 模拟耗时操作
        fmt.Println(c.Get(key))
    }()
}
wg.Wait()
Copier après la connexion

}

Ce qui précède présente quelques utilisations de base de la bibliothèque de synchronisation. Bien sûr, la bibliothèque de synchronisation fournit également. plus de primitives de synchronisation. Pour les développeurs qui souhaitent approfondir leur compréhension de la programmation simultanée Golang, il est très important de maîtriser l'utilisation de la bibliothèque de synchronisation.

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!

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