美文网首页
Go 并发模式

Go 并发模式

作者: 别瞄我 | 来源:发表于2020-08-04 17:35 被阅读0次

    1. 共享内存

    func main() {
        flag := 0
        go func() {
            fmt.Println("Hello World !!!")
            flag = 1
        }()
    Loop:
        for {
            if flag == 1 {
                break Loop
            }
        }
    }
    

    2. 互斥锁

    func main() {
        var mu sync.Mutex
        mu.Lock()
        go func() {
            fmt.Println("Hello World !!!")
            mu.Unlock()
        }()
        mu.Lock()
    }
    

    3. 无缓冲channel

    func main() {
        done := make(chan int)
        go func() {
            fmt.Println("Hello World !!!")
            <-done
        }()
        done <- 1
    }
    // 或
    func main() {
        done := make(chan int)
        go func() {
            fmt.Println("Hello World !!!")
            done <- 1
        }()
        <-done
    }
    

    4. 带缓冲channel

    func main() {
        len := 10
        done := make(chan int, len)
        // 开N个后台打印线程
        for i := 0; i < len; i++ {
            go func() {
                fmt.Println("Hello World !!! " + strconv.Itoa(i))
                done <- 1
            }()
        }
        // 等待N个后台线程完成
        for i := 0; i < len; i++ {
            <-done
        }
    }
    

    5. sync.WaitGroup

    func main() {
        var wg sync.WaitGroup
        // 开N个后台打印线程
        for i := 0; i < 10; i++ {
            wg.Add(1)
            go func() {
                fmt.Println("Hello World !!! " + strconv.Itoa(i))
                wg.Done()
            }()
        }
        // 等待N个后台线程完成
        wg.Wait()
    }
    

    相关文章

      网友评论

          本文标题:Go 并发模式

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