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()
	}
}

  

posted @ 2021-10-14 14:47  专职  阅读(451)  评论(0编辑  收藏  举报