golang 并发编程通过共享通信-不推荐
1 我理解的编发编程的基础于协调,协调就需于对话、沟通,难点也在此,并发本身不复杂,编发编程绕不开资源竞争问题,所以写并发我们写的最多的就是资源竞争,资源竞争操作必须保证其原子性,资源竞争后面分享
2 并发编程协成通信方式常见有两种:共享、消息,共享一般情况下,普通开发者接触最多的就是内存共享,在golang 中共享不是推荐通信手段,通过管道channel发送消息是一种更好的方式
摘抄一段官方的共享内存实例如下:(程序臃肿、业务复杂后维护起来更加琐碎)
package main
import (
"fmt"
"runtime"
"sync"
)
var counter int = 0
func Count(lock *sync.Mutex) {
lock.Lock()
counter++
fmt.Println(counter)
lock.Unlock()
}
func main() {
lock := &sync.Mutex{}
for i := 0; i
go Count(lock)
}
for {
lock.Lock()
c := counter
lock.Unlock()
runtime.Gosched()
if c >= 10 {
break
}
}
}
3 结论:不推荐