Go学习笔记(五):常见并发任务
2020-04-18 23:11:40摘要:仅执行一次 C#中的单例模式(懒汉式,线程安全) public class Singleton { private static volatile Singleton instance; private static readonly object syncRoot = new object(); private Singleton() { } public static Singleton GetInstance() { if (instance == null) { lock (syncRoot) { if (instance == null) { instance = new Singleton(); } } } return instance; } } Go的实现 type Singleton struct { data string } var singleInstance *Singleton var once sync.Once func GetSingletonObj() *Singleton { once.Do(func() { fmt.Println(Create Obj) singleInstance = new(Singleton) }) return singleInstance } 测试 func TestGetSingletonObj(t *testing.T) { var wg sync.WaitGroup for i := 0; i 5; i++ { wg.Add(1) go func() { obj := GetSingletonObj() fmt.Printf(%X\n, unsafe.Pointer(obj)) …… 阅读全文
