惜风不起、唯有努力!
go普通高并发

go普通高并发

package main

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

func main(){
	//var lock sync.Mutex
	var wg sync.WaitGroup

	for i := 1; i <= 3; i++ {
		//fmt.Println("---------",i)
		wg.Add(1) // 在每次启动一个新的goroutine前增加WaitGroup计数器
		go func(iCopy int) {
			//lock.Lock()  // 获取锁,确保同一时间只有一个goroutine能执行打印操作。解决多个协程访问共享资源
			for j := 1; j <= 5; j++ {
				time.Sleep(time.Second * time.Duration(3))
				fmt.Println(j)
			}
			//lock.Unlock()  // 完成临界区操作后释放锁,允许其他goroutine继续执行。
			defer wg.Done() //当goroutine结束其任务时,调用Done方法减少WaitGroup计数器
		}(i) // 将循环变量i的当前值复制给iCopy
	}

	defer wg.Wait() //调用wg.Wait()会阻塞主goroutine,直到WaitGroup计数器变为0,意味着所有已添加的任务都已经Done()。
}

发表回复

您的电子邮箱地址不会被公开。