91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
洞头县| 炎陵县| 阳春市| 定安县| 溧水县| 富顺县| 错那县| 平凉市| 宁乡县| 龙岩市| 通化市| 特克斯县| 绥阳县| 商水县| 张掖市| 石棉县| 金华市| 永城市| 莒南县| 海盐县| 工布江达县| 龙井市| 定陶县| 黑山县| 利川市| 汾阳市| 九龙坡区| 信阳市| 南部县| 临汾市| 新龙县| 延川县| 剑川县| 康平县| 呼图壁县| 紫阳县| 定兴县| 沁源县| 大理市| 津市市| 勃利县|