1. 程式人生 > >golang 多個routine之間的同步

golang 多個routine之間的同步

本文以一個例子的方式介紹channel在同步中的使用。

下面的例子中,主task首先阻塞,直到兩個task完成後,再繼續執行。

package main

import (
        "log"

        "time"
)


func main() {

        ch := make(chan int)


        go task1(ch)
        go task2(ch)

        for i:=0; i<2; i++ {

                v := <-ch
                log.Println("one task done:"
, v) } log.Println("All task done") } func task1(c chan int) { time.Sleep(1*time.Second) c <- 1 } func task2(c chan int) { time.Sleep(10*time.Second) c <- 2 }

output:

2018/02/03 22:18:07 one task done: 1
2018/02/03 22:18:16 one task done: 2
2018/02/03 22:18:16 All task done

執行過程如下:
主task阻塞;
task1等待1秒後,完成;
task2等待10秒後,完成;

最後主task,繼續執行到完成;