Mutex: 同時リソース アクセスの問題を解決しますか?

同時アクセスの問題について言えば、複数のゴルーチンがカウンターなどの同じリソースを同時に更新する、ユーザー アカウント情報を同時に更新する、数秒でシステムを強制終了する、同じバッファーに同時にデータを書き込むなど、非常に一般的な問題です。 . 相互排除制御がないと、カウンターの不正確なカウント、ユーザーのアカウントの当座貸越の可能性、seckill システムの過剰販売、バッファー内のデータの混乱など、いくつかの異常な状況が発生し、その結果は次のとおりです。非常に深刻です。
これらの問題を解決するには?はい、ミューテックスを使用します。これは Go 言語のミューテックスです。

ミューテックスの実装メカニズムと、Go 標準ライブラリでのミューテックス Mutex の基本的な使用法について詳しく説明します。次の 3 つのレッスンでは、Mutex の特定の実装原理、エラーが発生しやすいシナリオ、およびいくつかの拡張使用法についても説明します。
まず、ミューテックスの実装メカニズムを見てみましょう。

相互排他ロックの実現メカニズム

Mutex は同時実行制御の基本的な手段であり、競合を回避するために確立された同時実行制御メカニズムです。その特定の実装原則を学習する前に、まずクリティカル セクションである概念を理解する必要があります。
並行プログラミングでは、プログラムの一部が並行してアクセスまたは変更される場合、並行アクセスによって引き起こされる予期しない結果を避けるために、プログラムのこの部分を保護する必要があります. 保護されたプログラムのこの部分はクリティカルセクションと呼ばれます. .

クリティカル セクションは、データベースへのアクセス、共有データ構造に対する操作、I/O デバイスの使用、接続へのアクセスなど、共有リソース、または共有リソースのセット全体であると言えます。プールされた接続など。

多くのスレッドがクリティカル セクションに同期的にアクセスすると、アクセス エラーまたは操作エラーが発生します。これはもちろん、見たい結果ではありません。したがって、ミューテックスを使用して、一度に 1 つのスレッドだけがクリティカル セクションを保持するように制限できます。

クリティカル セクションがスレッドによって保持されている場合、他のスレッドがこのクリティカル セクションに入ろうとすると、失敗が返されます。

おすすめ

転載: blog.csdn.net/guofeidageda/article/details/129954015