31、sync.WaitGroup和sync.Once我们在前几次讲的互斥锁、条件变量和原子操作都是最基本重要的同步工具。在Go语言中,除了通道之外,它们也算是最为常用的并发安全工具了。 说到通道,不知道你想过没有,之前在一些场合下里,我们使用通道的方式看起来都似乎有些蹩脚。 比如:声明一个通道,使它的...2026-01-19Go语言核心36讲
30、原子操作(下)你好,我是郝林,今天我们继续分享原子操作的内容。 我们接着上一篇文章的内容继续聊,上一篇我们提到了,sync/atomic包中的函数可以做的原子操作有:加法(add)、比较并交换(compare and swap,简称CAS)、加载(load)、存储...2026-01-19Go语言核心36讲
29、原子操作(上)我们在前两篇文章中讨论了互斥锁、读写锁以及基于它们的条件变量,先来总结一下。 互斥锁是一个很有用的同步工具,它可以保证每一时刻进入临界区的goroutine只有一个。读写锁对共享资源的写操作和读操作则区别看待,并消除了读操作之间的互斥。 条件变量主要...2026-01-19Go语言核心36讲
28、条件变量sync.Cond (下)你好,我是郝林,今天我继续分享条件变量sync.Cond的内容。我们紧接着上一篇的内容进行知识扩展。 问题 1:条件变量的Wait方法做了什么?在了解了条件变量的使用方式之后,你可能会有这么几个疑问。 为什么先要锁定条件变量基于的互斥锁,才能调用它...2026-01-19Go语言核心36讲
27、条件变量sync.Cond (上)在上篇文章中,我们主要说的是互斥锁,今天我和你来聊一聊条件变量(conditional variable)。 前导内容:条件变量与互斥锁我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论。实际上,条件变量是基于互斥锁的,它必须有互斥锁的支撑才能发挥...2026-01-19Go语言核心36讲
26、sync.Mutex与sync.RWMutex我在前面用20多篇文章,为你详细地剖析了Go语言本身的一些东西,这包括了基础概念、重要语法、高级数据类型、特色语句、测试方案等等。 这些都是Go语言为我们提供的最核心的技术。我想,这已经足够让你对Go语言有一个比较深刻的理解了。 从本篇文章开始,我们...2026-01-19Go语言核心36讲