码迷,mamicode.com
首页 > 其他好文 > 详细

Go_Context

时间:2020-02-12 13:12:12      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:ase   pack   main   func   ack   使用   wait   default   efault   

如何通知子goroutine退出?

1. 使用全局变量

package main

import (
	"fmt"
	"sync"
	"time"
)

// 为什么需要context?
var wg sync.WaitGroup
var notify bool

func f() {
	defer wg.Done()
	for {
		fmt.Println("==")
		time.Sleep(time.Millisecond * 500)
		if notify {
			break
		}
	}
}

func main() {
	wg.Add(1)
	go f()
	time.Sleep(time.Second * 5)
	// 如何通知子goroutine退出
	notify = true
	wg.Wait()

}

2. 使用chan

package main

import (
	"fmt"
	"sync"
	"time"
)

// 为什么需要context?
var wg sync.WaitGroup
var exitChan = make(chan bool, 1)

func f() {
	defer wg.Done()
FORLOOP:
	for {
		fmt.Println("周琳")
		time.Sleep(time.Millisecond * 500)
		select {
		case <-exitChan:
			break FORLOOP
		default:
		}
	}
}

func main() {

	wg.Add(1)
	go f()
	time.Sleep(time.Second * 5)
	// 如何通知子goroutine退出
	exitChan <- true
	wg.Wait()
}

  

Go_Context

标签:ase   pack   main   func   ack   使用   wait   default   efault   

原文地址:https://www.cnblogs.com/yzg-14/p/12298514.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!