在Go語言中,實(shí)現(xiàn)并發(fā)安全主要依賴于以下幾種方式:
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 int32
func increment() {
atomic.AddInt32(&counter, 1)
}
func getCounter() int32 {
return atomic.LoadInt32(&counter)
}
sync.Map
是一個(gè)線程安全的map實(shí)現(xiàn),它是基于不可變數(shù)據(jù)結(jié)構(gòu)的。import "sync"
var sharedMap sync.Map
func storeData(key, value interface{}) {
sharedMap.Store(key, value)
}
func getData(key interface{}) interface{} {
return sharedMap.Load(key)
}
import "fmt"
func producer(ch chan<- int) {
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
}
func consumer(ch <-chan int, done chan<- bool) {
for num := range ch {
fmt.Println("Received:", num)
}
done <- true
}
func main() {
ch := make(chan int)
done := make(chan bool)
go producer(ch)
go consumer(ch, done)
<-done
}
通過以上方法,Go語言提供了豐富的并發(fā)安全機(jī)制,可以根據(jù)具體場(chǎng)景選擇合適的方法來實(shí)現(xiàn)并發(fā)安全。