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()
}


2 条回复
ccpp132 · 2026-01-07 19:38
#1

不会

YanSeven · 2026-01-07 19:48
#2

额,你这个 demo 不都已经写好了,go run 一下立马知道。

添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: 92pretty
发布: 2026-01-07
点赞: 0
回复: 0