亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
绥化市| 平度市| 瑞丽市| 永福县| 南木林县| 津南区| 陆河县| 阳高县| 札达县| 吉木萨尔县| 冷水江市| 贵阳市| 白沙| 行唐县| 岫岩| 广安市| 沙坪坝区| 清镇市| 罗源县| 普宁市| 鄄城县| 阿坝| 曲松县| 绵竹市| 陈巴尔虎旗| 辽阳县| 石河子市| 普安县| 依兰县| 承德县| 华池县| 新密市| 普定县| 新平| 岳阳县| 渭南市| 连山| 靖州| 水富县| 富平县| 仁寿县|