GoForum › 🌐 V2EX
下面代码中 f()会被重复执行吗?大佬帮忙解答一下~
92pretty ·
2026-01-07 19:03 ·
0 次点赞 · 2 条回复
下面代码中 f()会被重复执行吗?
package main
import (
"fmt"
"sync"
)
type Once struct {
m sync.Mutex
done uint32
}
func (o *Once) Do(f func()) {
if o.done == 1 {
return
}
o.m.Lock()
defer o.m.Unlock()
fmt.Println("bing: ", o.done)
if o.done == 0 {
o.done = 1
f()
}
}
func main() {
var once Once
wg := sync.WaitGroup{}
wg.Add(100)
for i := 0; i < 100; i++ {
go func() {
defer wg.Done()
once.Do(func() {
println("executed---------》 ")
})
}()
}
wg.Wait()
}
添加回复
你还需要 登录
后发表回复
不会