golang
CS打赢你
遇到的问题都会写个博客给大家分享,一起学习。
展开
-
go的同步机制(sync.Mutex)
一,并发进行i++操作type atomicInt struct { value int lock sync.Mutex}func (a *atomicInt) increment() { fmt.Println("safe increment") fmt.Println(a.value) func() { a.lock.Lock() defer a.lock.Unlock() a.value++ }()}func (a *atomicInt) get() .原创 2020-06-27 18:41:27 · 372 阅读 · 0 评论 -
go的闭包(累加之和)
问题:从1到10累加并且输出:它是通过自由变量实现的。如代码:sum为自由变量func add() func(int) int{ sum := 0 return func(i int) int{ sum += i return sum }}func main() { a := add() for i:=0;i<10;i++{ fmt.Printf("0+.......+%d: %d\n",i,a(i)) }}...原创 2020-06-27 14:12:07 · 373 阅读 · 0 评论 -
go多线程通信以及控制协程与主线程关闭问题(sync.WaitGroup)
一,需要分配10个协程去接收20个任务,每个协程接收2个任务。问题1:每个协程通过通道(chan int)接收的任务是否完成,主线程不知道?问题2:主线程如果执行完了,则在主线程的协程则会自动结束,未接收完的协程则自动被杀掉。解决方案如下:通过sync.WaitGroupwg.Add(n) :为wg添加 n 个任务,wg.Done() :减掉一个任务wg.Wait() : 这个用于主线程等待,等到所有任务执行完了。则就会结束。type Worker struct { ...原创 2020-06-27 13:52:59 · 1068 阅读 · 0 评论