首页 > GAME > 游戏 > 正文

泰安仿静坏科技有限公司,宿州缚肿代理记账有限公司,齐齐哈尔俑锤电子有限公司

太快了,来的实在是太快了,这还是唐三拥有紫极魔瞳之后,第一次感觉到视力跟不上对手动作。

赌博打鱼机输钱内幕

“在我们赛亚人一族里面有着这么一个传说,每一千年才会诞生一个无敌的战士,那是全宇宙最强的战士,被成为传说中的超级赛亚人!”贝吉塔说道。
不过,忙碌了一整天后,他也是感觉有些累了,便不再多想,躺下睡着了。

“这是咱们父亲留下的一套万里狼烟手!”纪太虚说道:“本来我也只是当做一门强身健体的东西来练的,不过近来我用妙法推演,已然是与原先有天壤之别。修炼这门功法可以接引上界的星辰之力,非是我等这个世界可比。这是我们父亲留下的,你要好生修炼,说不得到时候你还要跟我一起去往北疆,不管当年发生了什么,于国仇于家恨我都是必须去北疆的。”

data


如何实现子goroutine与主线程的同步

  • 第一种方式:time.sleep(),这种方式很太死板,就不演示了。
  • 第二种方式:使用channel机制,每个goroutine传一个channel进去然后往里写数据,在再主线程中读取这些channel,直到全部读到数据了子goroutine也就全部运行完了,那么主goroutine也就可以结束了。这种模式是子线程去通知主线程结束。
package main

import (
    "fmt"
)

func main() {
    var chanTest = make(chan int)
    var chanMain = make(chan int)

    go func() {
        for i := 0; i < 20; i++ {
            chanTest <- i
            fmt.Println("生产者写入数据", i)
        }
        close(chanTest)
    }()

    go func() {
        for v := range chanTest {
            fmt.Println("	消费者读出数据", v)

        }

        chanMain <- 666
    }()

    go func() {
        for v := range chanTest {
            fmt.Println("		消费者读出数据", v)

        }
        chanMain <- 666

    }()

    <-chanMain
    <-chanMain

}
  • 第三种方式:使用context中cancel函数,这种模式是主线程去通知子线程结束。
package main

import (
    "context"
    "fmt"
    "time"
)

func gen(ctx context.Context) <-chan int {
    dst := make(chan int)
    n := 1
    go func() {
        for {
            select {
            case <-ctx.Done():
                fmt.Println("i exited")
                return // returning not to leak the goroutine
            case dst <- n:
                n++
            }
        }
    }()
    return dst
}

func test() {
    
    ctx, cancel := context.WithCancel(context.Background())
    defer cancel() // cancel when we are finished consuming integers
    intChan := gen(ctx)
    for n := range intChan {
        fmt.Println(n)
        if n == 5 {
            break
        }
    }
}
func main() {
    test()
    time.Sleep(time.Hour)
}
  • 第四种方式:sync.WaitGroup模式,Add方法设置等待子goroutine的数量,使用Done方法设置等待子goroutine的数量减1,当等待的数量等于0时,Wait函数返回。
//使用golang中sync.WaitGroup来实现协程同步  
  
package main  
  
import (  
    "fmt"  
    "net/http"  
    "io/ioutil"  
    "time"  
    "os"  
    "sync"  
)  
  
var waitGroup = new(sync.WaitGroup)  
func download(i int ){  
        url := fmt.Sprintf("http://pic2016.ytqmx.com:82/2016/0919/41/%d.jpg", i)  
        fmt.Printf("开始下载:%s
", url)  
        res,err := http.Get(url)  
        if err != nil || res.StatusCode != 200{  
            fmt.Printf("下载失败:%s", res.Request.URL)  
        }  
        fmt.Printf("开始读取文件内容,url=%s
", url)  
        data ,err2 := ioutil.ReadAll(res.Body)  
        if err2 != nil {  
            fmt.Printf("读取数据失败")  
        }  
  
        ioutil.WriteFile(fmt.Sprintf("pic2016/1_%d.jpg", i), data, 0644)  
        //计数器-1  
        waitGroup.Done()  
}  
  
func main()  {  
    //创建多个协程,同时下载多个图片  
    os.MkdirAll("pic2016", 0666)  
    now := time.Now()  
  
    for i :=1; i<24; i++ {  
        //计数器+1  
        waitGroup.Add(1)  
        go download(i)  
    }  
  
    //等待所有协程操作完成  
    waitGroup.Wait()  
    fmt.Printf("下载总时间:%v
", time.Now().Sub(now))  
} 

当前文章:http://mabebox.com/25584/index.html

发布时间:2018-12-13 00:48:35

微信红包接龙群规 我的职业赌徒 盛付通换钱 太咸了怎么赚钱有时间电脑手机 赚钱最快的挂机软件 投资小挣钱快的生意 男人没钱不可以结婚 万象ol钱多多官网

编辑:伯帝石


声明:所发布的内容均来源于互联网,目的在于传递信息,但不代表本站赞同其观点及立场,版权归属原作者,如有侵权请联系删除。
身无分文如何赚钱

怎么网络兼职赚钱日结

手机上怎么赚钱啊