Go での再帰的ロック
Go の同期パッケージでは、Mutex データ構造は再帰的ロックをサポートしていません。これは、ゴルーチンが同じロックを連続して複数回取得できないことを意味します。これは制限のように思えるかもしれませんが、Go での再帰的ロックの実装には反対する強い議論があります。
Go 開発チームのメンバーである Russ Cox 氏によると、再帰的ミューテックスには根本的に欠陥があります。なぜなら、再帰的ミューテックスはミューテックスの保証を損なうからです。を提供するように設計されています。ミューテックスは、プログラムのデータ構造の重要なプロパティである不変条件を保護します。ゴルーチンはミューテックスを取得するとき、不変条件が保持されると想定します。
ただし、再帰的ミューテックスでは、ゴルーチンは同じロックを複数回取得できます。これにより、ゴルーチンがミューテックスのロックを解除し、ミューテックスを再取得する前にデータ構造を変更する可能性があるため、不変条件が破られる可能性が生じます。これにより、プログラムの動作が予測不能で誤った可能性が生じる可能性があります。
Cox 氏は、再帰的ロックの必要性を回避するためにコードを再設計することを推奨しています。ほとんどの場合、再帰的ロックを必要とせずに正しく動作するコードを書くことができます。
どうしても必要な場合は、Go で再帰的ロックをシミュレートするために使用できる回避策があります。ただし、これらの回避策は Go 標準ライブラリではサポートされていないため、注意して使用する必要があります。
以上がGo のミューテックスが再帰的ロックをサポートしないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。