面试题答案
一键面试atomic包常用数据结构及作用
atomic.Value
- 介绍:用于在多个goroutine间安全地读写任意类型的值。它能存储一个
interface{}
类型的值,并提供Store
和Load
方法来设置和获取这个值。 - 作用:在并发场景下,可用于安全地更新和读取配置信息、缓存数据等。例如,一个应用程序的配置信息可能会在运行时被动态更新,使用
atomic.Value
可以确保在更新配置(调用Store
方法)时,其他正在读取配置(调用Load
方法)的goroutine不会读到不一致的数据。
- 介绍:用于在多个goroutine间安全地读写任意类型的值。它能存储一个
atomic.Int32
和atomic.Int64
- 介绍:分别用于对32位和64位整数进行原子操作。提供了
Add
、CompareAndSwap
、Load
、Store
等方法。 - 作用:在并发编程中常用于计数器、信号量等场景。例如,在一个高并发的Web服务器中,可以使用
atomic.Int32
来统计当前活跃的请求数。通过Add
方法增加请求数,Load
方法获取当前请求数,CompareAndSwap
方法可以实现基于条件的更新,确保操作的原子性,避免竞态条件。
- 介绍:分别用于对32位和64位整数进行原子操作。提供了
atomic.Bool
- 介绍:用于对布尔值进行原子操作,提供
Load
、Store
、CompareAndSwap
等方法。 - 作用:常用于控制并发流程中的开关状态。比如,在一个分布式系统中,可能有多个节点同时尝试执行某项任务,但只允许一个节点执行,这时可以使用
atomic.Bool
来表示任务是否正在执行,通过CompareAndSwap
方法尝试将其从false
设置为true
,若设置成功则表示该节点获得执行权,其他节点根据Load
方法获取的值判断是否可以执行任务。
- 介绍:用于对布尔值进行原子操作,提供