在Go語言中,可以使用sync包中的Mutex類型來實現鎖機制。Mutex是互斥鎖,可以用來保護臨界區,防止多個goroutine同時訪問共享資源。
下面是一個使用Mutex實現鎖機制的示例代碼:
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++
}
在上述代碼中,首先創建了一個全局變量count和一個Mutex類型的lock變量。然后,在increment函數中,使用lock.Lock()方法對臨界區進行加鎖,確保只有一個goroutine可以進入臨界區。在臨界區內,對count進行了遞增操作。最后,使用lock.Unlock()方法對臨界區進行解鎖。
運行以上代碼,可以得到正確的遞增結果,并且保證了多個goroutine不會同時訪問臨界區,實現了鎖機制。