当前位置: 首页 > news >正文

Go 语言 sync 包解析

Go 语言的 sync 包是并发编程的核心工具集,提供了一系列同步原语,用于协调多个 goroutine 之间的操作,确保并发安全。它的设计围绕 Go 语言的 CSP(通信顺序进程)模型展开,同时也支持传统的共享内存同步方式。

一、核心同步原语

1. Mutex(互斥锁)

sync.Mutex 是最基础的互斥锁,保证同一时间只有一个 goroutine 能访问共享资源。

  • 核心方法

    • Lock():获取锁,若已被占用则阻塞等待。
    • Unlock():释放锁,必须与 Lock() 成对使用。
  • 使用场景:保护临界区资源,如共享变量的读写。

    var mu sync.Mutex
    var count intfunc increment() {mu.Lock()defer mu.Unlock()count++ // 临界区操作
    }
    
  • 注意事项

    • 不可重入:同一 goroutine 再次调用 Lock() 会导致死锁。
    • 需确保 Unlock() 被执行(通常用 defer)。
2. RWMutex(读写锁)

sync.RWMutex 是读写分离的锁,允许多个读操作并发,但写操作需独占。

  • 核心方法

    • 读锁:RLock() 获取,RUnlock() 释放(可被多个 goroutine 同时持有)。
    • 写锁:Lock() 获取,Unlock() 释放(独占)。
  • 适用场景:读多写少的场景(如缓存读取),提高并发效率。

    var rwmu sync.RWMutex
    var data map[string]intfunc readKey(key string) int {rwmu.RLock()defer rwmu.RUnlock()return data[key]
    }func writeKey(key string, val int) {rwmu.Lock()defer rwmu.Unlock()data[key] = val
    }
    
3. WaitGroup

sync.WaitGrou

http://www.dtcms.com/a/360690.html

相关文章:

  • [React]监听Form中某个字段的变化
  • vue2》》Computed、Watch
  • 【Vue2 ✨】Vue2 入门之旅(四):生命周期钩子
  • Git从零到远程协作:手把手实战指南
  • C 语言进程通信之信号API
  • [线上问题排查]1.数据库死锁全解析与解决方案
  • 算法:插入排序
  • LeetCode 刷题【58. 最后一个单词的长度、59. 螺旋矩阵 II】
  • 【开题答辩全过程】以 基于SSM的拾光咖啡厅管理系统的设计与实现为例,包含答辩的问题和答案
  • Introduction to GIS —— Chapter 4(Raster Data Model)
  • 批量修改用户密码的命令chpasswd
  • FTP - 学习/实践
  • JPEG XS概述
  • 草图大师SketchUp 2025下载安装教程与胚子库插件包安装for SketchUp 2025安装教程
  • 【AI智能体】LLM记账智能体+MCP服务-实现步骤与效果展示
  • 网络流量分析——使用Wireshark进行分析
  • SW - 用装配图的方式组合多个子零件然后转换成为零件,可维护性好
  • DRF快速构建RESTful API指南
  • 告别强化学习?GEPA:用“反思性提示词进化”实现超越的新范式
  • 【机器学习】-torch相关知识01
  • shell 命令拓展二——流程控制
  • springboot项目启动时打印maven打包时间
  • 华秋DFM检查PCB设计缺陷、一键导出Gerber、BOM、坐标文件
  • 平面椭圆转化为三阶Bezier曲线的方法
  • 目标检测算法YOLOv4详解
  • cloudflare 负载均衡器介绍
  • 用 MATLAB 实现遗传算法求解一元函数极值:从代码到实践
  • JS实现默认显示部分文字点击按钮显示全部内容
  • 使用组合子构建抽象语法树
  • 24数学建模国赛C