package main
import (
“sync”
“time”
“fmt”
)
/*
不同goroutine之间如何通讯
1)全局变量加锁同步
2)channel
使用全局变量加锁同步改进程序
因为没有对全局变量m加锁,因此会出现资源争夺问题,代码会出现错误,提示concurrent map writes
解决方案,加入互斥锁
我们的数的阶乘很大,结果会越界,可以将求阶改成sum+=unint64(i)
sync包提供了基本的同步基元,如互斥锁,除了once和waitGroup乐星,大部分都是适用于低水平程序县城,高水平的同步使用channel通信更好一些。
本包的类型的值不应被拷贝
/
var(
myMap = make(map[int]int,10)
//声明一个全局的互斥量
//lock 是一个全局的互斥量
//sync是包:synchornized同步
//Mutex:是互斥
lock sync.Mutex
)
//test函数就是计算n!,让将这个结果放入到myMap
func test(n int){
res:=1
for i:=1;i<=n;i++{
res=i
}
//这里将res放入到myMap
//加锁(在执行前不管怎么样先加锁)
lock.Lock()//(写+锁)
myMap[n]=res//concurrent map wri