编程小窍门: 一个简单的go mutex的小例子

本期小窍门用到了两个组件

  • mutex 这个类似其他语言的互斥锁
  • waitGroup 这个类似其他语言的信号量或者java的栅栏锁

示例如下

go 复制代码
func TestDoSomething04(t *testing.T) {
	total := 0
	var wg = sync.WaitGroup{}
	var mut = sync.Mutex{}   
	for i := 0; i < 5000; i++ {
		go func() {
			wg.Add(1)
			defer func() {
				mut.Unlock()
				wg.Done()
			}()
			mut.Lock()
			total++
		}()
	}
	wg.Wait()
	t.Log(total)
}
相关推荐
Memory_荒年3 分钟前
ReentrantLock 线程安全揭秘:从“锁”到“重入”的魔法
java·后端·源码
Leo8994 分钟前
go 从零单排之 切片 风云再起
后端
不羁到6 分钟前
【全平台适用】OpenClaw 进阶教程:Docker 隔离运行 + 浏览器联网 + 飞书流式输出
后端
凌览13 分钟前
尤雨溪新公司官宣!Vite+ 正式开源,前端圈要变天了?
前端·javascript·后端
zuoerjinshu22 分钟前
【spring专题】编译spring5.3源码
java·后端·spring
JavaGuide25 分钟前
鹅厂面试:SELECT * 一定导致索引失效?常见索引失效场景有哪些?
java·数据库·后端·mysql·大厂面试
是梦终空11630 分钟前
C++中的职责链模式变体
开发语言·c++·算法
mjhcsp35 分钟前
C++遗传算法(Genetic Algorithm,GA):进化式全局优化的核心解析
开发语言·c++
2401_895521341 小时前
springboot集成onlyoffice(部署+开发)
java·spring boot·后端