34 lines
746 B
Go
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("所有操作执行完成")
|
|
}
|