Go语言中的sync.WaitGroup详解

ops/2025/1/11 12:55:45/

Go 语言作为一种现代并发编程语言,提供了强大的并发模型和工具。其中,sync.WaitGroup 是 Go 标准库中的一个重要同步工具,广泛用于协程(goroutine)的同步控制。本文将深入探讨 sync.WaitGroup 的工作原理、应用场景以及如何避免使用共享变量和信号量来实现同步。

一、sync.WaitGroup 简介

sync.WaitGroup 是 Go 标准库 sync 包中的一个类型,主要用于同步多个协程的执行。它的核心作用是允许主程序或其他协程等待一组协程完成任务后再继续执行。

1. 结构
type WaitGroup struct {noCopy noCopy      // 防止被复制state1 atomic.Uint64 // 用于原子操作的状态标志sema   uint32      // 用于阻塞和唤醒
}

WaitGroup 内部通过原子操作(atomic)和信号量(sema)实现协程的同步。

2. 核心方法
  • Add(delta int)
    增加或减少等待的任务数量(计数器)。

    • delta > 0:增加任务数。
    • delta < 0:减少任务数。
  • Done()


http://www.ppmy.cn/ops/149164.html

相关文章

身份鉴权(PHP)(小迪网络安全笔记~

免责声明&#xff1a;本文章仅用于交流学习&#xff0c;因文章内容而产生的任何违法&未授权行为&#xff0c;与文章作者无关&#xff01;&#xff01;&#xff01; 附&#xff1a;完整笔记目录~ ps&#xff1a;本人小白&#xff0c;笔记均在个人理解基础上整理&#xff0c;…

机器学习赋能的智能光子学器件系统研究与应用

在人工智能与光子学设计融合的背景下&#xff0c;科研的边界持续扩展&#xff0c;创新成果不断涌现。从理论模型的整合到光学现象的复杂模拟&#xff0c;从数据驱动的探索到光场的智能分析&#xff0c;机器学习正以前所未有的动力推动光子学领域的革新。据调查&#xff0c;目前…

Ubuntu 磁盘修复

Ubuntu 磁盘修复 在 ubuntu 文件系统变成只读模式&#xff0c;该处理呢&#xff1f; 文件系统内部的错误&#xff0c;如索引错误、元数据损坏等&#xff0c;也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误&#xff0c;可能…

Java基础 注解

分类 Java自带的标准注解&#xff0c;包括Override、Deprecated和SuppressWarnings&#xff0c;分别用于标明重写某个方法、标明某个类或方法过时、标明要忽略的警告&#xff0c;用这些注解标明后编译器就会进行检查。元注解&#xff0c;元注解是用于定义注解的注解&#xff0…

关于Mac中的shell

1 MacOS中的shell 介绍&#xff1a; 在 macOS 系统中&#xff0c;Shell 是命令行与系统交互的工具&#xff0c;用于执行命令、运行脚本和管理系统。macOS 提供了多种 Shell&#xff0c;主要包括 bash 和 zsh。在 macOS Catalina&#xff08;10.15&#xff09;之前&#xff0c…

zookeeper监听机制(Watcher机制)

文章目录 引言I zookeeper监听机制Watcher机制实现分布式的通知功能触发事件种类Watcher的三个过程II watch机制特点一次性触发事件封装event异步发送先注册再触发常见的通知状态和事件类型III 应用案例(Kafka)Kafka的消息模型Kafka在Zookeeper中保存的元数据Kafka 基于Contr…

使用R包Corrplot绘制相关性图

前记 Corrplot是一个用于可视化相关性矩阵的R包。它提供了各种方法和选项来创建高质量的相关性图&#xff0c;并帮助用户更好地理解数据集中的变量之间的相关性。 相关性是指两个或多个变量之间的统计关系&#xff0c;它衡量了这些变量之间的线性关系的强度和方向。在数据分析和…

HTML-表单标签

一、form表单容器标签 <form> 标签在 HTML 中用于定义一个表单容器&#xff0c;用于收集用户输入的数据。它是所有表单元素&#xff08;如文本框、单选按钮、复选框、下拉菜单等&#xff09;的父元素。以下是关于 <form> 标签的详细介绍&#xff0c;包括其特点、用…