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

   2025-02-15 7300
核心提示:在Go语言中,可以使用sync包中的Mutex或RWMutex来实现多线程之间共享变量的访问控制。Mutex是一种互斥锁,可以使用Lock和Unlock

在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时,需要注意以下几点:

使用LockRLock方法获取锁时,如果锁已经被其他goroutine占用,则当前goroutine会阻塞等待锁释放。在释放锁之前,需要确保已经完成了对共享变量的读写操作,避免出现数据不一致的情况。可以使用defer语句来确保在函数返回时释放锁,避免忘记释放锁导致死锁的问题。

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言