首頁  >  文章  >  後端開發  >  Go語言文件解析:sync.Mutex函數實作互斥鎖

Go語言文件解析:sync.Mutex函數實作互斥鎖

WBOY
WBOY原創
2023-11-04 11:12:471070瀏覽

Go語言文件解析:sync.Mutex函數實作互斥鎖

Go語言是一種開源的程式語言,其中使用了並發程式設計模型來處理多個任務之間的交替執行。在同時編程中,往往涉及多個協程或執行緒同時存取共享資源的情況,此時就需要使用互斥鎖來確保資源的獨佔性,避免競態條件的發生。

在Go語言中,提供了sync套件來實現各種同步原語,其中就包括互斥鎖。 sync.Mutex類型是最基本的互斥鎖類型,它透過兩個方法LockUnlock來實作資源的互斥存取。

下面我們來具體看一下sync.Mutex的使用。

package main

import (
    "fmt"
    "sync"
    "time"
)

var count int
var mutex sync.Mutex

func increment() {
    mutex.Lock() // 加锁
    defer mutex.Unlock() // 解锁,在函数执行完毕后自动调用
    count++
}

func main() {
    for i := 0; i < 10; i++ {
        go increment()
    }

    time.Sleep(time.Second) // 等待所有协程执行完毕

    fmt.Println("count:", count)
}

在上面的程式碼中,首先定義了一個全域變數count用來記錄計數器的值,然後定義了一個sync.Mutex類型的互斥鎖mutex。在increment函數中,透過呼叫mutex.Lock()來獲得互斥鎖,保證只有一個協程能夠進入臨界區執行count 操作,然後呼叫mutex.Unlock()來釋放互斥鎖,讓其他協程可以繼續競爭執行。

main函數中,透過循環建立了10個協程,每個協程都會呼叫increment函數來增加計數器的值。為了確保所有協程都執行完畢,我們使用time.Sleep函數來讓主協程等待1秒鐘。

最後,我們將計數器的值印出來,可以看到正確輸出了count: 10

使用互斥鎖可以保證共享資源的安全訪問,避免了資料競態的發生。在多個協程或執行緒存取共享資源時,使用互斥鎖是非常重要的。 Go語言的sync.Mutex提供了簡單而強大的互斥鎖功能,使得並發程式設計變得更加容易和安全。

以上是Go語言文件解析:sync.Mutex函數實作互斥鎖的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn