ホームページ >バックエンド開発 >Golang >Mutex とは何ですか? Golang での使用方法は?

Mutex とは何ですか? Golang での使用方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-30 15:42:11685ブラウズ

自動 API ドキュメント生成ツールである LiveAPI の開発中に、サーバー マシンのコアの数に基づいて拡張できる堅牢なキュー メカニズムを実装する必要がありました。これは、リソース枯渇、クラッシュ、ユーザー エクスペリエンスの低下につながる可能性のある過剰なリソース使用 (メモリと CPU) を防ぐために非常に重要でした。

この記事では、この課題に対処するために Golang でミューテックスをどのように利用したかについて説明します。

ミューテックスとは何ですか?
同時プログラミングでは、Mutex (相互排他) は、一度に 1 つの goroutine だけが共有リソースにアクセスできるようにすることで競合状態を防ぐロック メカニズムです。 これは部屋の鍵に似ています。一度に 1 人だけが鍵を持って入ることができます。

What is Mutex and How to Use it in Golang?

Golang でのミューテックスの使用法
Mutex がジョブの同時実行をどのように管理できるかを説明してみましょう:
Go の sync パッケージは同期用のプリミティブをいくつか提供しており、Mutex は最も一般的に使用されるツールの 1 つです。

var (
    maxConcurrentJobs int
    activeJobs        int
    jobMutex          sync.Mutex
)

このコードでは、activeJobs 変数が現在実行中のジョブの数を追跡します。複数のゴルーチンがこの変数を同時に変更しようとして競合状態が発生する可能性があるため、ミューテックスを使用してアクセスを同期します。

// Check if we can process more jobs
jobMutex.Lock()
if activeJobs >= maxConcurrentJobs {
    jobMutex.Unlock()
    // Wait before checking again
    time.Sleep(time.Second)
    continue
}
jobMutex.Unlock()

ミューテックスの仕組み
ロック: Lock() メソッドは、クリティカル セクションへの排他的アクセスを取得します。

ロック解除: Unlock() メソッドはロックを解放します。

クリティカル セクション: **共有リソースにアクセスするロックとロック解除の間のコード。

Golang のミューテックスの種類
sync.Mutex: これは Go の基本的な相互排他ロックです。一度に 1 つの goroutine だけがクリティカル セクションにアクセスできます。

type SafeCounter struct {
    mu    sync.Mutex
    count int
}

sync.RWMutex: これは、複数のリーダーが共有リソースに同時にアクセスできるようにするリーダー/ライターのミューテックスですが、一度に 1 つのライターのみにアクセスできます。

var rwMutex sync.RWMutex
// Reader methods
rwMutex.RLock()   // Lock for reading
rwMutex.RUnlock() // Unlock for reading

// Writer methods
rwMutex.Lock()    // Lock for writing
rwMutex.Unlock()  // Unlock for writing

ミューテックスは、同時実行 Go プログラムで共有リソースを管理するために不可欠なツールです。コードの重要なセクションへのアクセスを制御することで、競合状態を防止し、データの整合性を確保します。

以上がMutex とは何ですか? Golang での使用方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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