1 个回答
sync.Once 是 Go 标准库中用于确保某个函数只执行一次的结构。其底层通过原子操作和互斥锁实现.
1、状态标记
1、状态标记
Once 内部有一个 done 字段(原子类型 uint32),初始值为 0,表示未执行。
2、并发控制:多个 Goroutine 调用 Do(f) 时,首先检查 done 是否为 0。
若为 0,通过原子操作 CompareAndSwap 将 done 置为 1,并执行函数f。
若 done 已为 1,则直接返回,不再执行 f。
3、互斥锁优化:在竞争情况下,Once 会临时使用互斥锁确保线程安全,但仅在首次执行时生效,后续调用无需锁。
发布于:1周前 (04-22) IP属地:
我来回答
您需要 登录 后回答此问题!