ホームページ  >  記事  >  バックエンド開発  >  Go 言語のドキュメント分析: sync.Mutex 関数はミューテックス ロックを実装します

Go 言語のドキュメント分析: sync.Mutex 関数はミューテックス ロックを実装します

WBOY
WBOYオリジナル
2023-11-04 11:12:471103ブラウズ

Go 言語のドキュメント分析: sync.Mutex 関数はミューテックス ロックを実装します

Go 言語は、同時プログラミング モデルを使用して複数のタスクの交互実行を処理するオープンソース プログラミング言語です。並行プログラミングでは、複数のコルーチンまたはスレッドが共有リソースに同時にアクセスすることがよくありますが、この場合、リソースの排他性を確保し、競合状態の発生を回避するために、ミューテックス ロックを使用する必要があります。

Go 言語では、ミューテックス ロックを含むさまざまな同期プリミティブを実装するための sync パッケージが提供されています。 sync.Mutex タイプは最も基本的なミューテックス ロック タイプで、2 つのメソッド 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 型のミューテックスが定義されます。ロックミューテックスincrement 関数で、mutex.Lock() を呼び出してミューテックス ロックを取得し、count 操作を実行するためにクリティカル セクションに入ることができるのは 1 つのコルーチンだけであることを確認します。次に、mutex.Unlock() を呼び出してミューテックス ロックを解放し、他のコルーチンが実行のために競合し続けることができるようにします。

main 関数では、ループを通じて 10 個のコルーチンが作成され、各コルーチンは increment 関数を呼び出してカウンター値をインクリメントします。すべてのコルーチンが確実に実行されるように、time.Sleep 関数を使用してメイン コルーチンを 1 秒待機させます。

最後に、カウンターの値を出力します。count: 10 が正しく出力されていることがわかります。

ミューテックス ロックを使用すると、共有リソースへの安全なアクセスが保証され、データ競合を回避できます。複数のコルーチンまたはスレッドが共有リソースにアクセスする場合、ミューテックス ロックを使用することが非常に重要です。 Go 言語の sync.Mutex は、シンプルかつ強力なミューテックス ロック機能を提供し、同時プログラミングをより簡単かつ安全にします。

以上がGo 言語のドキュメント分析: sync.Mutex 関数はミューテックス ロックを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。