编程小窍门: 一个简单的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)
}
相关推荐
绿浪198417 分钟前
c# 结构体 能不能直接封送检测
开发语言·c#
vipxieliang27 分钟前
ValidX 的 Date 和 DateTime vs JPA 的 Temporal 对比
java·后端
触底反弹33 分钟前
🔥 从「为什么」到「怎么用」:TypeScript 类型约束与泛型完全指南
后端·面试·typescript
用户83562907805135 分钟前
使用 Python 查找和替换 Word 文档中的文本
后端·python
Java编程爱好者38 分钟前
Spring Boot 实现数据脱敏:自定义注解 + Jackson 序列化器
后端
神奇小汤圆40 分钟前
从 ☕️Java Spring Boot → 🦀Rust Axum 体验的真实感受
后端
橙橙笔记1 小时前
QT的安装
开发语言·qt·安装·软件
掘金者阿豪2 小时前
Codex 开放 1M 上下文后,我折腾了一圈才发现:新版根本不是网上教的那样配置
后端
爱勇宝2 小时前
《道德经》第 10 章:真正成熟的人,能成事但不控制一切
前端·后端·程序员
格林威2 小时前
C#图像像素放大:邻域平均、双线性插值实现像素放大的C#实现代码
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机