type mutex struct {
ch chan struct{}
}
func newMutex() *mutex {
ch := make(chan struct{}, 1)
ch <- struct{}{}
return &mutex{
ch: ch,
}
}
func (m *mutex) lock() {
<-m.ch
}
func (m *mutex) unlock() {
m.ch <- struct{}{}
}
type person struct {
name string
age int
}
var p *person
var mu *mutex = newMutex()
func newPerson() *person {
if p != nil {
return p
}
mu.lock()
defer mu.unlock()
if p != nil {
return p
}
p = new(person)
return p
}
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
fmt.Printf("%p\n", newPerson())
}()
}
wg.Wait()
}
【Go】自定义锁+double-check实现懒汉式单例模式
最新推荐文章于 2024-07-14 22:33:03 发布