在Golang中,鎖機制主要通過sync
包來實現。sync
包提供了多種鎖類型,如互斥鎖(Mutex
)、讀寫鎖(RWMutex
)等。
下面是一個使用互斥鎖實現高性能并發處理的示例:
package main
import (
"fmt"
"sync"
"time"
)
type Data struct {
value int
lock sync.Mutex
}
func main() {
data := Data{}
var wg sync.WaitGroup
for i := 0; i < 1000; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
data.setValue(i)
}(i)
}
wg.Wait()
fmt.Println(data.getValue())
}
func (d *Data) setValue(value int) {
d.lock.Lock()
defer d.lock.Unlock()
time.Sleep(time.Millisecond) // 模擬耗時操作
d.value += value
}
func (d *Data) getValue() int {
d.lock.Lock()
defer d.lock.Unlock()
return d.value
}
在示例中,Data
結構體表示共享數據,其中的lock
字段是一個互斥鎖對象。setValue
方法和getValue
方法分別對value
字段進行寫操作和讀操作,使用互斥鎖進行保護。
在main
函數中,使用WaitGroup
來等待所有goroutine完成。每個goroutine調用setValue
方法將自己的值累加到Data
的value
字段上。
通過使用互斥鎖,可以確保在并發情況下對共享數據的安全訪問。