Skip to content

Latest commit

 

History

History
74 lines (44 loc) · 713 Bytes

once.md

File metadata and controls

74 lines (44 loc) · 713 Bytes

#Once

Once结构如下:

type Once struct {
	m		Mutex
	done	uint32
}

##成员m

用于保证Once不会并发执行动作。

##成员done

用于保证Once只会执行一次。当done==1表明动作已经完成。

##func (o *Once) Do(f func())

参数:

  • func 函数类型

返回值:

功能:

  • 执行且仅执行f()一次

代码示例:

package main

import (
	"fmt"
	"sync"
)

func main() {
	once := new(sync.Once)
	ch := make(chan int, 3)

	for i := 0; i < 3; i++ {
		go func(x int) {
			once.Do(func() {
				fmt.Printf("once %d\n", x)
			})
			fmt.Printf("%d\n", x)
			ch <- 1
		}(i)
	}

	for i := 0; i < 3; i++ {
		<-ch
	}
}

输出:

once 0

0

1

2