LockManager クラス

LockManager クラスです。

継承階層

System.Object
  Microsoft.TeamFoundation.Framework.Server.LockManager

名前空間:  Microsoft.TeamFoundation.Framework.Server
アセンブリ:  Microsoft.TeamFoundation.Framework.Server (Microsoft.TeamFoundation.Framework.Server.dll 内)

構文

'宣言
Public Class LockManager
public class LockManager

LockManager 型で公開されるメンバーは以下のとおりです。

コンストラクター

  名前 説明
パブリック メソッド LockManager コンストラクター

このページのトップへ

メソッド

  名前 説明
パブリック メソッド AssertLockHeld(Object, LockManager.LockType, Int64) (デバッグ アサート) 現在のスレッドが特定のロックが保持されることをアサートします。
パブリック メソッド AssertLockHeld(ILockName, LockManager.LockType, Int64) (デバッグ アサート) 現在のスレッドが特定のロックが保持されることをアサートします。
パブリック メソッド AssertLockNotHeld(Object, LockManager.LockType, Int64) 指定されたロック (デバッグ アサート) 現在のスレッドが保持していないことをアサートします。
パブリック メソッド AssertLockNotHeld(ILockName, LockManager.LockType, Int64) 指定されたロック (デバッグ アサート) 現在のスレッドが保持していないことをアサートします。
パブリック メソッド AssertNoLocksHeld(Int64) 現在のスレッドが LockManager のロックを保持しないことをアサートします。
パブリック メソッド AssertNoLocksHeld(LockManager.LockType, Int64) 指定されたロック (デバッグ アサート) 現在のスレッドが保持していないことをアサートします。
パブリック メソッド AssertZeroActiveLockObjects
パブリック メソッド静的メンバー CompareLockTypes 比較は 2 種類 (ロックの種類が比較可能なない場合スロー) をロックします。
パブリック メソッド Equals 指定のオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (Object から継承されます。)
プロテクト メソッド Finalize オブジェクトがガベージ コレクションにより収集される前に、そのオブジェクトがリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッド GetHashCode 特定の型のハッシュ関数として機能します。 (Object から継承されます。)
パブリック メソッド GetLock(Object, LockManager.LockType, Int64) ロックを取得します。
パブリック メソッド GetLock(ILockName, LockManager.LockType, Int64) 名前付きのロックを取得します。
パブリック メソッド GetType 現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッド Lock(Object, Int64) 特定のオブジェクトのリーフのモニター ロックを取得します。
パブリック メソッド Lock(Object, LockManager.LockType, Int64) オブジェクトのモニター ロックを取得します。
パブリック メソッド Lock(ILockName, LockManager.LockType, Int64) 名前付きのロックを取得します。
プロテクト メソッド MemberwiseClone 現在の Object の簡易コピーを作成します。 (Object から継承されます。)
パブリック メソッド ReleaseAnyLock 最も内側のロックに指定されたロックの種類の任意の名前をリリースします。
パブリック メソッド ReleaseLock(Object, LockManager.LockType, Int64) ロックを解放します。
パブリック メソッド ReleaseLock(ILockName, LockManager.LockType, Int64) 指定したロックを解放します。
パブリック メソッド TestLock(Object, LockManager.LockType, Int64) このスレッドが既にロックを保持する場合をテストします。
パブリック メソッド TestLock(String, LockManager.LockType, Int64) このスレッドが既にロックを保持する場合をテストします。
パブリック メソッド ToString 現在のオブジェクトを表す文字列を返します。 (Object から継承されます。)
パブリック メソッド TryGetLock(Object, LockManager.LockType, Int64) ロックを取得しようとしてください。
パブリック メソッド TryGetLock(ILockName, LockManager.LockType, Int64, Int32)

このページのトップへ

解説

管理ストアはデッドロックの回避を方法します。すべてロック LockManager ロックを使用する必要があります。レベル (ロック階層における位置)、すべてのロックが割り当てられます、操作できます現在保持されているロックよりも、階層の上位にあるロックだけを要求します。

LockManager「という名前のロック」の概念をサポートしている電子.g.をない可能性があります安定のオブジェクト メモリにいくつかのエンティティをロックする必要がある場合は、このようなエンティティの名前だけをがあります。例は、メールボックスとデータベースです。メールボックスまたはデータベースに関連付けられたすべてのオブジェクトに移動し、ことができます、育成はようなエンティティの名前、メールボックス データベースまたはメールボックスの GUID データベースなどの私たちのすべてがあります。私たちはモニターのロックと読み取り/書き込みロック名前付きロックをサポートします。

LockManager もサポートしています通常「ロック オブジェクト」と私たちする必要がありますロックは、特定のオブジェクト インスタンスのメモリ。C#「ロック」のステートメントで使用するためのメカニズムは、同じオブジェクトのロックは、ロックが現在サポートされているモニターだけをロックします。「ロック」ステートメント、ロック階層では、オブジェクトのロックを完全に参加 LockManager のとは対照的にそのためこれらが正しい順序で使用されます確認できます。

「ロックのオブジェクト」の 1 つの特殊なケースは、「リーフ オブジェクト ロック」です。私たちのようなロックのロック レベルを指定する必要はありません - それは、常に多くの入れ子のロックにする必要し、ロックは他のような葉のロックを保持すると取得できません。

「という名前のロック」動的に、ロック オブジェクトはそれぞれ一意の名前を割り当てるし、グローバル辞書に格納するために実装されます。したがって名前によって、名前付きのロックへのアクセスには、ロックの対応するオブジェクトを検索するには、辞書の検索が必要です。このようなルックアップを実行している間、ロック オブジェクトのディクショナリ自体ロックする必要があります。この名前付きロック可能性がありますロックは通常より高価、辞書、辞書検索をロックするための追加コストできます。このようなコストを削減するのには、2 つの方法を使用して: 分割 (1) 辞書のグローバル ロックの競合を減らすためには、オブジェクトのディクショナリをロックと (2) 呼び出し名前付きロック オブジェクトへの参照をキャッシュして、辞書の検索時間のほとんどをバイパスする機能を提供します。データベース ロックなどの比較的範囲の全体にわたるロックでは解決しないため単独で分割できないことに注意してください。 たとえば、みんな同じを取得しようとロックを共有します。

潜在的に無限の数のロックの一意の名前です。したがって、作成できます可能性のある名前付きのロック オブジェクトの数も、指定しません。名前付きロック オブジェクトへの参照をグローバル辞書に格納されているため、このようなオブジェクトはガベージ コレクションを自動的にできませんでした。したがって、定期的に使用されていない名前付きロック オブジェクトをクリーンアップできるようにします。名前付きのロック オブジェクトのスレッド セーフなクリーンアップをサポートするには、このようなオブジェクトを refcounted です。"Addrefed"のようなオブジェクトを持つすべてのロックを上の名前付きのロック オブジェクトを取得する必要があります、ロックが解放された後も、参照を解放する必要があります。クリーンアップ ロジックは現在、辞書から削除する前に参照されていないことを確認します。辞書から、名前付きのロック オブジェクトが削除され、破棄としてマークされています addrefed それ以上することはできません。次に、同じ名前をロックしようと同じ名前を持つ新しい名前付きのロック オブジェクトの割り当てとをディクショナリに追加になります。したがって、OK 古いロックのオブジェクト参照は、呼び出し元によってキャッシュという名前です - このような古い参照の発見し次回、ロックし、ロックの新しいオブジェクトを割り当てるしようとすると、更新されます。

未使用のロック オブジェクトをクリーンアップするにはヒューリスティック ベースの簡単な時間を使用します。N にロックの解放呼び出しのクリーンアップを実行し、辞書を調べます、最近使用されていないすべての参照されていないオブジェクトを収集するには、時間があればチェックの名前。すべてのオブジェクトを破棄してからディクショナリへの参照を削除するには、試行します。私たち私たちは指定されたパーティションのクリーンアップを実行すると、他のパーティションをロックする必要はありませんように辞書のパーティションごとにクリーンアップです。

スレッド セーフ

この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

参照

関連項目

Microsoft.TeamFoundation.Framework.Server 名前空間