zoukankan      html  css  js  c++  java
  • ch17go语句及其执行规则

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        for i := 0; i < 10; i++{
            go func() {
                fmt.Println(i)
            }()
        }
    }

    输出为空-->主goroutine执行完毕,程序就结束运行,不会等待go函数执行完毕

    package main
    
    import (
        "fmt"
        "time"
    )
    
    func main() {
        for i := 0; i < 10; i++{
            go func(i int) {
                fmt.Println(i)
            }(i)
            time.Sleep(time.Second)
        }
    }
    package main
    import (
        "fmt"
        "sync/atomic"
        "time"
    )
    func main() {
        var count uint32
        trigger := func(i uint32, fn func()) {
            for {
                if n := atomic.LoadUint32(&count); n == i {
                    fn()
                    atomic.AddUint32(&count, 1)
                    break
                }
                time.Sleep(time.Nanosecond)
            }
        }
        for i := uint32(0); i < 10; i++{
            go func(i uint32) {
                fn := func() {
                    //传参可以保证每个goroutine拿到唯一的一个整数
                    fmt.Println(i)
                }
                trigger(i, fn)
            }(i)
            time.Sleep(time.Second)
        }
        trigger(10, func() {})
    }
  • 相关阅读:
    01-Django 简介
    函数及函数的嵌套等
    循环及循环嵌套
    运算符
    if, elif, else及if嵌套
    变量及变量计算和引用
    Python的3种执行方式
    Jmeter设置默认中文启动
    Vysor
    python基础学习(二)
  • 原文地址:https://www.cnblogs.com/liushoudong/p/13129851.html
Copyright © 2011-2022 走看看