go-go协程
1、主进程程退出,协程也退出 2、主协程退出,子协程也退出
sync.WaitGroup :等待协程退出。
WaitGroup对象内部有个计时器,最初从0开始, 计数器不能为负。 他有3个方法 Add(), Done(), Wait()用来控制计数器的数量。 Add(n) 把计数器设置成n, Done() 每次把计数器-1, wait() 会阻塞代码的运行, 直到计数器的值减为0。
func main() { wg := sync.WaitGroup{} wg.Add(100) for i := 0; i < 100; i++ { go func(i int) { fmt.Println(i) wg.Done() }(i) } wg.Wait() }
runtime.Goexit结束当前goroutine,其他的goroutine不受影响,主程序也一样继续运行
os.Exit会结束当前程序
func test() { defer fmt.Println("end") //return //终止此函数 runtime.Goexit() //终止协程 }
var muLock sync.Mutex
muLock.Lock()
muLock.Unlock()
var rwLock sync.RWMutex
默认写锁
rwLock.Lock()
rwLock.Unlock()
读锁
rwLock.RLock()
rwLock.RUnlock()