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

installation de synchronisation golang

WBOY
WBOYoriginal
2023-05-16 12:59:40693parcourir

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"

)

type Counter struct {

mux sync.Mutex // 互斥锁用于保护Counter的值
value int

}

func (c *Counter) Inc() {

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

}

func ( c *Counter) Value() int {

c.mux.Lock()
defer c.mux.Unlock()
return c.value

}

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的值

}

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"

)

type Cache struct {

data map[string]string
mux sync.RWMutex // 读写锁用于保护Cache

}

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

c.mux.RLock() // 加读锁
defer c.mux.RUnlock() // 解锁
return c.data[key]

}

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

c.mux.Lock() // 加写锁
defer c.mux.Unlock() // 解锁
c.data[key] = value

}

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()

}

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:
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
Article précédent:installation de Golang LinuxArticle suivant:installation de Golang Linux