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()

 

posted @ 2019-03-16 20:59  osbreak  阅读(158)  评论(0编辑  收藏  举报