在Go語言中,可以使用sync包中的Mutex類型來實現(xiàn)鎖機制。Mutex是互斥鎖,可以用來保護(hù)臨界區(qū),防止多個goroutine同時訪問共享資源。
下面是一個使用Mutex實現(xiàn)鎖機制的示例代碼:
package main
import (
"fmt"
"sync"
"time"
)
var (
count int
lock sync.Mutex
)
func main() {
wg := sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Add(1)
go increment(&wg)
}
wg.Wait()
fmt.Println("Final count:", count)
}
func increment(wg *sync.WaitGroup) {
lock.Lock() // 加鎖
defer lock.Unlock() // 解鎖
defer wg.Done()
// 模擬耗時操作
time.Sleep(time.Millisecond * 100)
count++
}
在上述代碼中,首先創(chuàng)建了一個全局變量count和一個Mutex類型的lock變量。然后,在increment函數(shù)中,使用lock.Lock()方法對臨界區(qū)進(jìn)行加鎖,確保只有一個goroutine可以進(jìn)入臨界區(qū)。在臨界區(qū)內(nèi),對count進(jìn)行了遞增操作。最后,使用lock.Unlock()方法對臨界區(qū)進(jìn)行解鎖。
運行以上代碼,可以得到正確的遞增結(jié)果,并且保證了多個goroutine不會同時訪問臨界區(qū),實現(xiàn)了鎖機制。