中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

golang多線程共享變量怎么實現

小億
117
2023-10-25 17:53:40
欄目: 編程語言

在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語句來確保在函數返回時釋放鎖,避免忘記釋放鎖導致死鎖的問題。

0
青田县| 六安市| 莫力| 尚志市| 伊宁县| 托克托县| 辽阳县| 拜城县| 绥阳县| 晋州市| 梧州市| 迁西县| 和政县| 丽水市| 宣恩县| 大同县| 塔城市| 孟村| 龙岩市| 鄂托克前旗| 铜梁县| 白银市| 瑞丽市| 图木舒克市| 乡宁县| 通化市| 明光市| 靖江市| 兰考县| 鄂伦春自治旗| 沙河市| 青铜峡市| 小金县| 泗阳县| 溧阳市| 东乌珠穆沁旗| 扬中市| 龙江县| 庆阳市| 襄汾县| 自贡市|