当前位置: 首页 > 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.xdnf.cn/news/1419085.html

相关文章:

  • 三消消乐益智小游戏抖音快手微信小程序看广告流量主开源
  • 前端安全防护深度实践:从XSS到CSRF的完整安全解决方案
  • 大模型落地:从微调到部署的全景式实战指南
  • DAY02:【DL 第一弹】pytorch
  • 宋红康 JVM 笔记 Day09|方法区
  • 【阿里云实战】基于MQTT的Java SDK收发消息-终端和终端消息收发
  • 汽车曲柄连杆机构cad+ea113+设计说明书
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第八章知识点问答(18题)
  • 从理论到RTL,实战实现高可靠ECC校验(附完整开源代码/脚本)(3) RTL实现实战
  • DBeaver社区版AI助手(AI Assistant)设置
  • 基于Hadoop与层次聚类技术的电子游戏销售分析系统的设计与实现
  • 机器翻译:python库PyGTranslator的详细使用
  • (论文速读)3DTopia-XL:高质量3D资产生成技术
  • FOUPK3云服务平台旗下产品
  • ARM-进阶汇编指令
  • linux安装gitlab详细教程,本地管理源代码
  • 存储掉电强制拉库引起ORA-01555和ORA-01189/ORA-01190故障处理---惜分飞
  • 英伟达Newton与OpenTwins如何重构具身智能“伴随式数采”范式
  • 【ElasticSearch实用篇-04】Boost权重底层原理和基本使用
  • Ruoyi项目MyBatis升级MyBatis-Plus指南
  • linux:离线/无网环境安装docker
  • 从Java全栈开发到微服务架构:一次真实的面试实录
  • (Arxiv-2025)HunyuanCustom:一种面向多模态驱动的定制化视频生成架构
  • vizard-将长视频变成适合社交的短视频AI工具
  • 【JavaWeb】之HTML(对HTML细节的一些总结)
  • vue3使用路由router
  • 大规模异构数据挖掘与数据架构
  • C++ STL序列容器-------list
  • 【LeetCode】3524. 求出数组的 X 值 I (动态规划)
  • 机器学习(四)KNN算法-分类