2012-08-06 16 views
60

は、ウィキペディアによると、排他ロックと共有ロックの違いは何ですか?

共有ロックは時々、「ロックを読んで」と呼ばれ、排他ロックは、時々、「書き込みロック」と呼ばれています。

「共有」および「排他的」という用語の背後にある理由を説明できますか?

答えて

254

黒板としてロック可能オブジェクトの

と思います( 教師(作家)と多くのの生徒(読者)が含まれているクラスルームで受講できます。

先生は、ボード上の何か(排他ロック)を書き込んでいる間:それはまだ書かれていますので、

  1. 誰もが、それを読むことはできません、そしてオブジェクトが排他的にロックされている場合、彼女はあなたのビュー=>をブロックしています共有ロックは取得できません

  2. 他の教師は出てこないか、ボードを読むことができなくなり、学生は混乱する=>オブジェクトが排他的にロックされている場合、他の排他ロックは得られません。

    学生がボード上にあるもの(共有ロック)を読んでいる

:彼らはすべてがそれにあるものを読むことができ

  1. 、一緒に=>複数の共有ロックが共存することができます

  2. ボードをクリアしてmore =>を書き込む前に、先生が読み終えるのを待ちます。共有ロックが既に存在する場合は、排他ロックを取得できません。

+5

抽象度を非常によくキャプチャする優れた類推(非優越類似性はまれです!)。ありがとう! –

+1

とても良い説明です。しかし、POは、「共有」と「排他的」な貨幣の原点*を求めました。熱自体の説明ではありません。 – serhio

+7

なぜArjunShankarのような人々は、本を書かないでください?非常に興味深く理解できる説明。 – user3388473

15

それは非常に簡単です。読み取りロックは、複数のプロセスが同時に読み取ることができるため、共有ロックとも呼ばれます。読み取りロックのポイントは、書き込みロックの別のプロセスによる取得を防止することです。対照的に、書き込みロックは、書き込み操作が完了している間に他のすべての操作を禁止するため、排他的として記述されています。

ので、読み込みロックは、「あなたが今読むことができますが、あなたが書きたい場合は、待たなければならないだろう」書き込みロックは、「あなたは待たなければならない」と言うのに対して言います。


私はあなたの研究を支援して研究していることを実感していますが、私は講義への衝動に抵抗することはできません。ロックの

無能な使用は、パフォーマンスの頭痛の主な原因です。読み書きロックを区別するロックシステムの使用は良いスタートですが、慎重な設計ではロックの必要性を排除することがあります。たとえば、セッション状態が状態の要素ごとに1つのグローバルなコレクションで開催されていないことがありません。

私は実際にこれが行わ見てきました。ボクシングを引き起こし、セッション状態への最後の変更ごとにコレクションへの変更を引き起こし、長引く書き込みロックを引き起こす、凶悪なデザインです。オーバーヘッドは、サーバーをシングルスレッドの動作に効果的に削減していました。単に構造体の中に、すべてのセッション状態を集約

は大幅に改善しました。セッション状態の変更は、単にセッションの状態構造体のメンバの値を変更しました。他のセッションには、セッションの状態を直接参照する機会や機会がなかったため、更新されるコレクションはセッションのリストだけでした。その結果、ロックは、開始時と終了時に、完全に不要中sesssionであり、スループットがリソースは、ユーザ・アプリケーションのスレッド間で共有されている3000

他の一般的なロッキングシナリオ倍上昇しました。現代のフレームワークのほとんどは、ロックではなくメッセージを使用してこれに対処しています。あなたが「UIスレッドに移行」するとき、実際には関数ポインタといくつかのパラメータ(または実装に応じてデリゲートとスタックフレーム)を含むメッセージを実際にキューに入れています。

2
  • 排他または書込みロックは、プロセスがファイルの指定された部分に書込みを行うための排他アクセスを提供します。書き込みロックが設定されている間は、他のプロセスがファイルのその部分をロックすることはできません。

  • 共有ロックまたは読み取りロックは、他のプロセスがファイルの指定された部分の書き込みロックを要求することを禁止します。ただし、他のプロセスは読み取りロックを要求できます。その上

より:http://www.gnu.org/software/libc/manual/html_node/File-Locks.html私はこれが楽しい(フィッティング)類推だろうと思ったので、私がダウンしてこの答えを書いた

0

原理はデータベース側でも同様です。 Oracleのドキュメントのとおり

排他ロック・モードでは、関連するリソースを共有できません。このロックモードは、データを変更するために取得されます。リソースを排他的にロックする最初のトランザクションは、排他ロックが解放されるまでリソースを変更できる唯一のトランザクションです。

共有ロックモードでは、関係する操作に応じて、関連するリソースを共有できます。データを読み取る複数のユーザーが共有ロックを保持してデータを共有することができ、ライター(排他ロックが必要なユーザー)による同時アクセスを防止できます。いくつかのトランザクションは、
が同じリソース上で共有ロックを取得することができます。

関連する問題