다음을 통해 공유


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 형식에서는 다음과 같은 멤버를 노출합니다.

생성자

  이름 설명
Public 메서드 LockManager 생성자

위쪽

메서드

  이름 설명
Public 메서드 AssertLockHeld(Object, LockManager.LockType, Int64) (디버그 어설션) 현재 스레드에서 해당된 잠금을 보유 하는 가정 합니다.
Public 메서드 AssertLockHeld(ILockName, LockManager.LockType, Int64) (디버그 어설션) 현재 스레드에서 해당된 잠금을 보유 하는 가정 합니다.
Public 메서드 AssertLockNotHeld(Object, LockManager.LockType, Int64) Assert 특정된 잠금 현재 스레드 (디버그 어설션)을가지고 있지 않습니다.
Public 메서드 AssertLockNotHeld(ILockName, LockManager.LockType, Int64) Assert 특정된 잠금 현재 스레드 (디버그 어설션)을가지고 있지 않습니다.
Public 메서드 AssertNoLocksHeld(Int64) 현재 스레드의 LockManager 잠그지 않음에 어설션.
Public 메서드 AssertNoLocksHeld(LockManager.LockType, Int64) Assert 특정된 잠금 현재 스레드 (디버그 어설션)을가지고 있지 않습니다.
Public 메서드 AssertZeroActiveLockObjects 어설션 iff는 잠금 관리자에 활성 잠금 (여기서 refcount & amp; gt; 0)
Public 메서드정적 멤버 CompareLockTypes 형식 (잠금 형식을 비교할 수 없는 경우 throw) 잠금 두 비교.
Public 메서드 Equals 지정한 개체와 현재 개체가 같은지 여부를 확인합니다. (Object에서 상속됨)
Protected 메서드 Finalize 가비지 수집에서 회수하기 전에 개체에서 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)
Public 메서드 GetHashCode 기본 해시 함수로 작동합니다. (Object에서 상속됨)
Public 메서드 GetLock(Object, LockManager.LockType, Int64) 잠금을 가져옵니다.
Public 메서드 GetLock(ILockName, LockManager.LockType, Int64) 명명 된 잠금을 가져옵니다.
Public 메서드 GetType 현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Public 메서드 HasLocks 이 requestId 잠금을 소유 하 고 있으면 true를 반환
Public 메서드 Lock(Object, Int64) 지정된 된 개체에 대 한 리프 모니터 잠금을 가져옵니다.
Public 메서드 Lock(Object, LockManager.LockType, Int64) 한 객체 모니터 잠금을 가져옵니다.
Public 메서드 Lock(ILockName, LockManager.LockType, Int64) 명명 된 잠금을 가져옵니다.
Protected 메서드 MemberwiseClone 현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Public 메서드 ReleaseAnyLock 모든 이름과 특정된 잠금 형식의 가장 많이 중첩 된 잠금을 해제 합니다.
Public 메서드 ReleaseLock(Object, LockManager.LockType, Int64) 잠금을 해제 합니다.
Public 메서드 ReleaseLock(ILockName, LockManager.LockType, Int64) 명명 된 잠금을 해제 합니다.
Public 메서드 TestLock(Object, LockManager.LockType, Int64) 이 스레드는 이미 잠금을 유지 하는 경우를 테스트 합니다.
Public 메서드 TestLock(String, LockManager.LockType, Int64) 이 스레드는 이미 잠금을 유지 하는 경우를 테스트 합니다.
Public 메서드 ToString 현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨)
Public 메서드 TryGetLock(Object, LockManager.LockType, Int64) 잠금을 가져올 시도 합니다.
Public 메서드 TryGetLock(ILockName, LockManager.LockType, Int64, Int32) 명명 된 잠금 가져오기

위쪽

설명

관리 되는 저장소 교착 상태 방지 사례. 모든 잠금 LockManager 잠금을 사용 해야 합니다. 모든 잠금 수준 (잠금 계층 구조에 있는 위치)을 할당 하 고 작업을 수행 하는 계층 구조에서 현재 보유 된 잠금을 요청 잠금만 수 있습니다.

LockManager 예: "잠금 이라는"의 개념을 지원 우리는 우리가 하지 않은 안정적인 엔터티에 잠그는 해야 메모리에 개체 있지만 이러한 엔터티의 이름만. 사서함 및 데이터베이스는 있습니다. 제공 하 고 이동 사서함 또는 데이터베이스에 연결 된 모든 개체 수, 이름, 사서함 데이터베이스 또는 사서함 번호 GUID 데이터베이스 등은 이러한 엔터티에 대 한 안정적인 내 야 해요. 명명 된 잠금에 대 한 모니터 잠금을 한 판독기-작성기 잠금을 지원합니다.

일반 "개체 잠금", LockManager도 지원 메모리에 특정 개체 인스턴스를 잠그는 해야 하겠습니다. 만 모니터 잠금 개체 잠금에 대해 현재 지원 되는 일치 하는 C# "잠금" 문에 사용 되는 메커니즘을 잠금. LockManager 개체 잠금을 잠금 계층 구조를 완전 하 게 참여 하는 "잠금" 문을 달리 따라서 확인 하기 올바른 순서로 사용 됩니다.

"개체 잠금" 특별 한 "리프 개체 잠금"입니다. 이러한 잠금 잠금 수준을 지정할 수 없으므로-항상 대부분 중첩 잠금이 될 것입니다 및 이러한 잎 잠금을 보유 하는 경우 수행할 수 없으면 다른 잠금.

"잠금 이라는" 동적으로 각 고유 이름에 대 한 잠금 개체로 할당 하 고 글로벌 사전에 저장 하 여 구현 됩니다. 따라서 이름으로 명명 된 잠금 액세스 사전 조회 해당 잠금 개체를 찾을 수 있어야 합니다. 잠금 개체 사전 자체 잠가야 이런 조회를 수행 하는 동안. 이 모든는 사전과 사전 조회 잠금 추가 비용 때문에 잠재적으로 일반 잠금 보다 비싼 명명 된 잠금. 이러한 비용을 줄이기 위해 두 가지 기술을 사용: (1) 사전 글로벌 잠금 경합을 줄이려면 잠금 개체 사전 분할 (2) 제공 하 호출자 잠금 명명 된 개체 참조를 캐시 하 고 대부분의 사전 조회를 무시 하는 기능입니다. Note를 분할 혼자 충분 한 때문에 않습니다 데이터베이스 잠금; 등 비교적 넓은 범위 잠금 많은 도움이 되지는 않습니다 예를 들어, 동일한 선택 하려는 모든 잠금을 공유 합니다.

고유 잠금 이름 제한 될 수가 있습니다. 따라서 잠재적으로 만들 수 있습니다 잠금 명명 된 개체 수가 없는 경우도 경계 잠금 명명 된 개체를 참조 하는 글로벌 사전에 저장 되므로 이러한 개체 자동 가비지 수집 되지 못했습니다. 따라서 정기적으로 사용 하지 않는 명명 된 잠금 개체를 정리할 수 있도록 하겠습니다. 명명 된 잠금 개체의 스레드 안전 정리를 지원 하기 위해 이러한 개체입니다 됩니다. 모든 잠금 잠금 명명 된 개체에 대해 수행 해야 이러한 개체는 "addrefed" 것, 잠금 해제 된 후 참조를 해제 해야 합니다. 정리 논리 개체 사전에서 제거 하기 전에 현재 참조 되지 않은 확인 합니다. 명명 된 잠금 개체를 사전에서 제거 후 삭제 된 것으로 표시 하 고 addrefed를 더 이상 수 없습니다. 다음 번에 같은 이름의 잠금 시도가 동일한 이름을 가진 명명 된 잠금 새 개체를 할당 하 고 사전에 추가 하면 됩니다. 따라서는 확인 부실에 명명 된 캐시 호출자가 잠금 개체 참조-참조 이러한 부실 찾아서 업데이트 다음에 잠그고 잠금을 새로운 개체를 할당 하려고 했습니다.

간단한 시간 기반 추론 잠금 사용 하지 않는 개체를 정리 하는 데 사용 됩니다. 모든 N에 라는 잠금 해제 호출이 있으면 정리를 실행 후 사전 검토 및 최근에 사용 되는 모든 참조 되지 않은 개체를 수집 하는 데 시간이 있는지 확인 합니다. 그런 다음 이러한 모든 개체를 삭제 하 고 사전에서 해당 참조를 제거 하려면 시도 합니다. 지정된 된 파티션에 대 한 정리를 실행 하면 다른 파티션의 잠글 수 없으므로 되도록 사전 파티션 당 정리를 합니다.

스레드로부터의 안전성

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

참고 항목

참조

Microsoft.TeamFoundation.Framework.Server 네임스페이스