Files
bulma/atomic_flag.go
T

34 lines
746 B
Go

// bulma/atomic_flag.go
package main
import (
"fmt"
"sync"
"sync/atomic"
"time"
)
func main() {
var ready atomic.Bool // 就绪标志(原子布尔值)
var wg sync.WaitGroup
// 消费者goroutine:等待标志位变为true后执行
wg.Add(1)
go func() {
defer wg.Done()
// 循环检测标志位,直到变为true(无锁,高效)
for !ready.Load() {
time.Sleep(10 * time.Millisecond)
}
fmt.Println("✅ 消费者检测到 ready=true,开始处理")
}()
// 生产者goroutine:模拟初始化操作,完成后设置标志位
time.Sleep(50 * time.Millisecond) // 模拟初始化耗时
ready.Store(true)
fmt.Println("🔧 生产者设置 ready=true")
wg.Wait()
fmt.Println("所有操作执行完成")
}