golang

golang多线程共享变量怎么实现

小亿
129
2023-10-25 17:53:40
栏目: 编程语言
GO开发者专用服务器,限时0元免费领! 查看>>

在Go语言中,可以使用sync包中的MutexRWMutex来实现多线程之间共享变量的访问控制。

Mutex是一种互斥锁,可以使用LockUnlock方法来控制对共享变量的读写访问。在使用Lock方法之前,需要先获取锁,然后再使用Unlock方法来释放锁。

import (
    "sync"
)

var (
    mu sync.Mutex
    count int
)

func main() {
    go increment()
    go increment()

    // 等待所有goroutine执行完成
    time.Sleep(time.Second)

    fmt.Println("count:", count)
}

func increment() {
    for i := 0; i < 100000; i++ {
        mu.Lock()
        count++
        mu.Unlock()
    }
}

RWMutex是一种读写锁,支持多个goroutine同时读取共享变量,但只能有一个goroutine进行写操作。可以使用RLockRUnlock方法来获取和释放读锁,使用LockUnlock方法来获取和释放写锁。

import (
    "sync"
)

var (
    mu sync.RWMutex
    count int
)

func main() {
    go read()
    go read()
    go write()

    // 等待所有goroutine执行完成
    time.Sleep(time.Second)

    fmt.Println("count:", count)
}

func read() {
    for i := 0; i < 100000; i++ {
        mu.RLock()
        _ = count
        mu.RUnlock()
    }
}

func write() {
    for i := 0; i < 100000; i++ {
        mu.Lock()
        count++
        mu.Unlock()
    }
}

在使用sync.Mutexsync.RWMutex时,需要注意以下几点:

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

相关推荐:golang多线程共享变量的方法是什么

0
看了该问题的人还看了