溫馨提示×

Go語言中怎么實現(xiàn)鎖機制

小億
88
2024-01-27 18:15:49
欄目: 編程語言

在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)了鎖機制。

0