Golang的map 是线程安全的吗?

Go语言的map不是线程安全的。在并发情况下,对map的读和写操作需要加锁,否则可能会因为并发操作引起的竞态条件导致程序崩溃。如果你需要在多个goroutine中访问和修改同一个map,你需要使用锁来保证线程安全。

Go语言提供了sync包中的sync.RWMutex读写锁,或者使用sync.Map来实现并发安全的map

下面是一个使用sync.RWMutex的例子:

var m = make(map[string]int)
var mutex = &sync.RWMutex{}

// 写入数据到map
func write(key string, value int) {
    mutex.Lock()
    m[key] = value
    mutex.Unlock()
}

// 从map中读取数据
func read(key string) (int, bool) {
    mutex.RLock()
    defer mutex.RUnlock()
    value, ok := m[key]
    return value, ok
}

在这个例子中,我们使用sync.RWMutex读写锁来保护map,在读取map时使用读锁,在写入map时使用写锁,这样就可以在并发环境下安全的使用map了。

发表评论

后才能评论