共計 893 個字符,預計需要花費 3 分鐘才能閱讀完成。
在 Go 語言中,可以使用 sync
包中的 Mutex
類型來保障數據的讀寫正確性。Mutex
是互斥鎖的意思,它提供了兩個方法 Lock
和Unlock
,分別用于加鎖和解鎖。下面是一個示例代碼,演示了如何使用 Mutex
來保障數據讀寫的正確性:
package main
import ("fmt"
"sync"
"time"
)
type Counter struct {
mu sync.Mutex
count int
}
func (c *Counter) Increment() {c.mu.Lock()
defer c.mu.Unlock()
c.count++
}
func (c *Counter) Read() int {c.mu.Lock()
defer c.mu.Unlock()
return c.count
}
func main() {counter := Counter{}
wg := sync.WaitGroup{}
// 啟動多個 goroutine 并發地對計數器進行增加操作
for i := 0; i < 100; i++ {wg.Add(1)
go func() {defer wg.Done()
counter.Increment()}()}
wg.Wait()
// 讀取計數器的值
fmt.Println(counter.Read())
}
在上面的代碼中,Counter
類型包含了一個 sync.Mutex
類型的字段 mu
用于保護 count
字段的讀寫操作。Increment
方法用于對 count
進行增加操作,而 Read
方法用于讀取 count
的值。
在 Increment
和Read
方法中,首先使用 c.mu.Lock()
來加鎖,然后在方法體結束時使用 c.mu.Unlock()
來解鎖。這樣就保證了在代碼塊中只有一個 goroutine 可以訪問 count
字段,從而保障了數據的讀寫正確性。
在 main
函數中,啟動了 100 個并發的 goroutine 對計數器進行增加操作,最后再讀取計數器的值。由于使用了 Mutex
進行加鎖和解鎖,所以在多個 goroutine 并發地對計數器進行增加操作時,不會出現數據競爭的問題。最后輸出的計數器的值為 100,表示數據讀寫的正確性得到了保障。
丸趣 TV 網 – 提供最優質的資源集合!
正文完