2

共有ロックをいつ使用する必要があるかを誰かが説明できますか? 私の理解が正しければ、読み取り時には共有ロックが使用され、書き込み時には排他ロックが使用されます。

しかし、読み取りを行うときにミューテックスがロックされている間、なぜ待つことができないのでしょうか。

4

4 に答える 4

2

パフォーマンス向上のためです。これにより、複数の同時読み取りを連続して行う必要がなくなります。これは、構造体が頻繁に読み取られる場合に大きな利点となる可能性があります。(それでも、読み込まれたデータは一貫して最新のものになります。)

于 2012-08-31T08:50:23.570 に答える
1

しかし、読み取りを行うときにミューテックスがロックされている間、なぜ待つことができないのでしょうか。

通常は速度用です。共有ロックでは、コンテンツが変更されないため、複数のリーダーが許可されます。排他的ロックでは、すべての書き込みをアトミックにする必要があるため、(通常は) 1 回の書き込み操作のみが許可されます。

ここからのより多くの技術的な定義。

排他ロックは、回復可能および回復不能の両方のファイル リソースへの更新を保護します。一度に 1 つのトランザクションのみが所有できます。別のタスクが現在、要求されたリソースに対して排他ロックまたは共有ロックを所有している場合、排他ロックを必要とするトランザクションは待機する必要があります。共有ロック

共有ロックは読み取り整合性をサポートします。これらは、読み取り専用リクエスト中にレコードが更新されていないことを保証します。共有ロックは、レコードが読み取られてから次の同期点までの間のレコードの更新を防ぐためにも使用できます。

于 2012-08-31T08:52:41.167 に答える
0

しかし、読み取りを行うときにミューテックスがロックされている間、なぜ待つことができないのでしょうか。

特定のシナリオ、特に多くのスレッドがデータ構造を頻繁に読み取りますが、書き込みはほとんどなく、頻繁ではないシナリオでは非効率的であるためです。誰も書き込みを行っていない場合、複数の同時読み取りはスレッドセーフであるため、リーダーを相互に排除するのは無駄です。

サーバーと複数のクライアントが、共有データに対してさまざまなトランザクションを実行していると想像してください。これらのクライアントのほとんどが単に情報を求めているだけで、何も変更していない場合、一度に 1 つのクライアントしか読み取ることができないと、サーバーのパフォーマンスが低下します。

于 2012-08-31T08:50:27.687 に答える