美文网首页golang技巧篇
golang atomic.Value用法

golang atomic.Value用法

作者: _yun | 来源:发表于2022-12-06 16:20 被阅读0次
    • 自定义可原子操作的变量类型
    package main
    
    import (
        "log"
        "sync"
        "sync/atomic"
    )
    
    type Config struct {
        a []int
    }
    
    func main() {
        var v atomic.Value
        v.Store(&Config{}) // 这行不能省
        go func() {
            i := 0
            for {
                i++
                /*
                  错误示范
                  cfg.a = []int{i, i + 1, i + 2, i + 3, i + 4, i + 5}
                */
                cfg := &Config{a: []int{i, i + 1, i + 2, i + 3, i + 4, i + 5}}
                v.Store(cfg)
            }
        }()
    
        var wg sync.WaitGroup
        for n := 0; n < 4; n++ {
            wg.Add(1)
            go func() {
                for n := 0; n < 100; n++ {
                    cfg := v.Load().(*Config)
                    log.Printf("%v\n\n", cfg)
                }
                wg.Done()
            }()
        }
        wg.Wait()
    }
    

    总结:

    atomic.Value提供了一种自定义变量类型的原子操作, 读: v.Load().(*Config), 写: v.Store(cfg), 并且初始化 var v atomic.Value 后, 需要指定v的读写类型, 即 v.Store(&Config{})

    相关文章

      网友评论

        本文标题:golang atomic.Value用法

        本文链接:https://www.haomeiwen.com/subject/dszwfdtx.html