import("fmt""sync""testing""time")var wg sync.WaitGroup
var mutex sync.Mutex
var sumMap =make(map[int]int)//存放阶乘数据funcsetMap(num int){
mutex.Lock()var sum =1for i :=1; i <= num; i++{
sum *=i
}
sumMap[num]= sum
fmt.Println(sum)
time.Sleep(time.Millisecond)
mutex.Unlock()
wg.Done()}//互斥锁funcTestGoroutingLock(t *testing.T){for i :=1; i <=20; i++{
wg.Add(1)gosetMap(i)}
wg.Wait()}
读写互斥锁
互斥锁是完全互斥的,但是有很多实际的场景下是读多写少的,当我们并发的去读取一个资 源不涉及资源修改的时候是没有必要加锁的,这种场景下使用读写锁是更好的一种选择。读写锁在 Go 语言中使用 sync 包中的RWMutex 类型.