在Go語言中,保證并發(fā)編程的線程安全主要依賴于以下幾個(gè)方面:
sync.Mutex
結(jié)構(gòu)體來實(shí)現(xiàn)互斥鎖。import "sync"
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
sync.RWMutex
結(jié)構(gòu)體來實(shí)現(xiàn)讀寫鎖。import "sync"
var rwMu sync.RWMutex
var sharedData map[string]string
func readData(key string) string {
rwMu.RLock()
defer rwMu.RUnlock()
return sharedData[key]
}
func writeData(key, value string) {
rwMu.Lock()
defer rwMu.Unlock()
sharedData[key] = value
}
sync/atomic
包來實(shí)現(xiàn)原子操作。import "sync/atomic"
var counter int64
func increment() {
atomic.AddInt64(&counter, 1)
}
func worker(done chan bool) {
// Do some work...
done <- true
}
func main() {
done := make(chan bool)
go worker(done)
<-done
}
sync
包還提供了許多其他的同步原語,如sync.WaitGroup
、sync.Once
等,可以用于實(shí)現(xiàn)更復(fù)雜的并發(fā)控制。總之,在Go語言中,保證并發(fā)編程的線程安全需要使用適當(dāng)?shù)耐皆Z來確保對共享資源的訪問是互斥或有序的。在實(shí)際編程中,應(yīng)根據(jù)具體場景選擇合適的同步機(jī)制。