go语言学习笔记:协程间同步
跟C语言没啥区别,都是用锁、读写锁。另外跟C语言一样有多协程间内存同步(内存屏障)问题。但是Go中直接用锁来解决。
var loadIconsOnce sync.Once var icons map[string]image.Image // Concurrency-safe. func Icon(name string) image.Image { loadIconsOnce.Do(loadIcons) //保证loadIcons执行过,切只执行一次。如果执行了一次,那么下面的操作肯定是安全的 return icons[name] }