Go 协调goroutines

示例

想象一下一个具有两步过程的goroutine,其中主线程需要在每一步之间做一些工作:

func main() {

    ch := make(chan struct{})

    go func() {

        // 等待主线程的信号开始第一步

        <-ch

        

        // 执行工作

        time.Sleep(1 * time.Second)

        

        // 向主线程发出第一步已完成的信号

        ch <- struct{}{}

        

        // 等待主线程的信号开始第二步

        <-ch

        

        // 执行工作

        time.Sleep(1 * time.Second)

        

        // 向主线程发出工作已完成的信号

        ch <- struct{}{}

    }()

    

    // 通知goroutine第一步可以开始

    ch <- struct{}{}

    

    // 等待goroutine通知第一步已完成

    <-ch

    // 在通知之前执行一些工作

    // 第二步可以开始的程序

    time.Sleep(1 * time.Second)

    

    // 通知goroutine第二步可以开始

    ch <- struct{}{}

    

    // 等待goroutine通知第二步已完成

    <-ch

}

           

以上是 Go 协调goroutines 的全部内容, 来源链接: utcz.com/z/315766.html

回到顶部