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

溫馨提示×

golang多線程共享變量的方法是什么

小億
124
2023-11-28 14:17:28
欄目: 編程語言

在Golang中,可以使用goroutine和channel來實現多線程共享變量。

  1. 使用goroutine和channel:

    • 使用goroutine創建多個線程,每個線程可以并發執行。
    • 使用channel來進行線程間的通信和數據共享,確保線程安全。
    • 通過channel發送數據到指定的goroutine,并通過channel接收來自其他goroutine的數據。

    示例代碼如下:

    package main
    
    import (
        "fmt"
    )
    
    func worker(id int, jobs <-chan int, results chan<- int) {
        for j := range jobs {
            fmt.Println("Worker", id, "started job", j)
            results <- j * 2 // 將處理結果發送到results通道中
        }
    }
    
    func main() {
        jobs := make(chan int, 100)
        results := make(chan int, 100)
    
        // 創建3個worker goroutine
        for w := 1; w <= 3; w++ {
            go worker(w, jobs, results)
        }
    
        // 向jobs通道中發送任務
        for j := 1; j <= 9; j++ {
            jobs <- j
        }
        close(jobs)
    
        // 從results通道中接收處理結果
        for a := 1; a <= 9; a++ {
            <-results
        }
    }
    

    上述示例中,使用goroutine創建了3個worker線程,它們從jobs通道中接收任務,并將處理結果發送到results通道中。在main函數中,向jobs通道中發送9個任務,然后從results通道中接收9個處理結果。

  2. 使用sync包中的互斥鎖:

    • 使用sync包中的Mutex類型來保護共享變量,確保同一時間只有一個線程可以訪問共享變量。
    • 使用Lock方法鎖定共享變量,在訪問共享變量之前調用,使用Unlock方法解鎖共享變量,在訪問共享變量之后調用。

    示例代碼如下:

    package main
    
    import (
        "fmt"
        "sync"
    )
    
    var (
        counter int
        wg      sync.WaitGroup
        mutex   sync.Mutex
    )
    
    func worker() {
        defer wg.Done()
        for i := 0; i < 1000; i++ {
            mutex.Lock()
            counter++
            mutex.Unlock()
        }
    }
    
    func main() {
        wg.Add(2)
        go worker()
        go worker()
        wg.Wait()
        fmt.Println("Counter:", counter)
    }
    

    上述示例中,使用sync包中的Mutex類型來保護共享變量counter,確保同一時間只有一個線程可以訪問counter。在每個worker函數中,使用Lock方法鎖定counter,在訪問counter之前調用,使用Unlock方法解鎖counter,在訪問counter之后調用。最后輸出counter的值。

無論是使用goroutine和channel,還是使用互斥鎖,都可以實現多線程共享變量。具體使用哪種方式取決于具體的業務場景和需求。

0
寿光市| 吴堡县| 墨竹工卡县| 花莲市| 晋江市| 南汇区| 嘉义市| 兰州市| 武宣县| 叶城县| 玉山县| 禄劝| 鹤峰县| 民和| 阳东县| 彩票| 松潘县| 林西县| 太仓市| 平武县| 民和| 淳安县| 阜阳市| 石首市| 米易县| 桐梓县| 博湖县| 堆龙德庆县| 望城县| 普洱| 同仁县| 星座| 嘉义市| 崇州市| 闸北区| 彰化市| 济宁市| 普兰店市| 阜新市| 昌都县| 虹口区|