golang中mutex使用
package main import ( "fmt" "sync" "time" ) /* 高并发是golang语言最大的亮点 一个线程可以包含多个协程,共享堆不共享栈 协程一般由应用程序显示实现调度,上下文切换不需下到内核层,高效不少 golang中实现协程间通讯有两种方式: (1)共享内存型:使用全局变量+mutex锁实现数据共享 (2)消息传递型:使用一种独有的channel机制实现异步通讯 */ var mutex sync.Mutex var ret = 0 func main() { // golang中多协程共享全局变量,如果需要修改全局变量就需要加锁 go task() for i := 0; i < 1000000; i++ { mutex.Lock() ret++ mutex.Unlock() } time.Sleep(time.Second) fmt.Println(ret) // 2000000 } func task() { for i := 0; i < 1000000; i++ { mutex.Lock() ret++ mutex.Unlock() } }