1. 共享内存
func main() {
flag := 0
go func() {
fmt.Println("Hello World !!!")
flag = 1
}()
Loop:
for {
if flag == 1 {
break Loop
}
}
}
2. 互斥锁
func main() {
var mu sync.Mutex
mu.Lock()
go func() {
fmt.Println("Hello World !!!")
mu.Unlock()
}()
mu.Lock()
}
3. 无缓冲channel
func main() {
done := make(chan int)
go func() {
fmt.Println("Hello World !!!")
<-done
}()
done <- 1
}
// 或
func main() {
done := make(chan int)
go func() {
fmt.Println("Hello World !!!")
done <- 1
}()
<-done
}
4. 带缓冲channel
func main() {
len := 10
done := make(chan int, len)
// 开N个后台打印线程
for i := 0; i < len; i++ {
go func() {
fmt.Println("Hello World !!! " + strconv.Itoa(i))
done <- 1
}()
}
// 等待N个后台线程完成
for i := 0; i < len; i++ {
<-done
}
}
5. sync.WaitGroup
func main() {
var wg sync.WaitGroup
// 开N个后台打印线程
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
fmt.Println("Hello World !!! " + strconv.Itoa(i))
wg.Done()
}()
}
// 等待N个后台线程完成
wg.Wait()
}
网友评论