面试真题

Go · 中等 · Momenta

golang中哪些数据类型是线程安全的?

中等 Go 🎤 Momenta
参考答案
结论:Go原生数据类型大多非线程安全,仅channel及借助同步原语包装的类型并发安全。核心要点:1) channel本身线程安全,收发操作原子且同步;2) sync.Mutex等同步类型用于保护资源;3) atomic包对基础类型原子操作安全;4) 内置map、slice、struct等并发读写需外部锁,否则map会panic;5) string只读可安全并发读但不可变。原理:channel运行时加锁保证同步;map无锁设计假设无并发写;atomic使用CPU锁指令。示例:多goroutine写map需sync.RWMutex。
题目整理自公开面经,答案由校招宝自研生成,仅供参考