标签:rgb type 模式 string 竞争 写法 mem var emc
最近在写golang代码,使用go编译器的race分析工具,提升以下代码有资源竞争的问题:
1 type MemCache struct { 2 data []string 3 } 4 5 var memCacheInstance *MemCache 6 var memCacheCreateMutex sync.Mutex 7 8 func GetMemCache() *MemCache { 9 if memCacheInstance == nil { 10 memCacheCreateMutex.Lock() 11 defer memCacheCreateMutex.Unlock() 12 13 if memCacheInstance == nil { 14 memCacheInstance = &MemCache{ 15 data: make([]string, 0), 16 } 17 } 18 } 19 return memCacheInstance 20 }
严格分析的话,加锁之前读取 memCacheInstance 的操作的确存在资源争夺的问题,但是似乎这种双重检查的写法在单例模式中十分常见,属于常规操作。如果不加双重检查,每次读取都需要加锁,肯定要影响性能。这种看似无害的资源竞争是否可以存在呢?
标签:rgb type 模式 string 竞争 写法 mem var emc
原文地址:https://www.cnblogs.com/TO-WW/p/14438295.html