IReadWriteLock 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
A ReadWriteLock
는 연결된 Lock locks
쌍을 유지 관리합니다. 하나는 읽기 전용 작업용이고 다른 하나는 쓰기용입니다.
[Android.Runtime.Register("java/util/concurrent/locks/ReadWriteLock", "", "Java.Util.Concurrent.Locks.IReadWriteLockInvoker")]
public interface IReadWriteLock : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/concurrent/locks/ReadWriteLock", "", "Java.Util.Concurrent.Locks.IReadWriteLockInvoker")>]
type IReadWriteLock = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 파생
- 특성
- 구현
설명
A ReadWriteLock
는 연결된 Lock locks
쌍을 유지 관리합니다. 하나는 읽기 전용 작업용이고 다른 하나는 쓰기용입니다. #readLock 읽기 잠금은 기록기가 없는 한 여러 판독기 스레드에서 동시에 유지될 수 있습니다. #writeLock 쓰기 잠금은 배타적입니다.
모든 ReadWriteLock
구현은 연결된 readLock
작업(인터페이스에 Lock
지정된 대로)의 writeLock
메모리 동기화 효과도 유지하도록 보장해야 합니다. 즉, 읽기 잠금을 성공적으로 획득하는 스레드는 쓰기 잠금의 이전 릴리스에서 수행한 모든 업데이트를 볼 수 있습니다.
읽기-쓰기 잠금을 사용하면 상호 제외 잠금에서 허용하는 것보다 더 높은 수준의 공유 데이터에 액세스할 수 있습니다. 한 번에 하나의 스레드(em 기록기/em> 스레드)만 공유 데이터를 수정할 수 있지만 대부분의 경우 모든 스레드가 동시에 데이터를 읽을 수 있습니다(따라서 <em>판독<기/em> 스레드).<>< 이론적으로 읽기/쓰기 잠금을 사용하여 허용되는 동시성이 증가하면 상호 제외 잠금 사용에 비해 성능이 향상됩니다. 실제로 이러한 동시성 증가는 다중 프로세서에서만 완전히 실현된 다음 공유 데이터에 대한 액세스 패턴이 적합한 경우에만 실현됩니다.
읽기/쓰기 잠금이 상호 배제 잠금을 사용하는 동안 성능을 향상시킬지 여부는 데이터를 수정하는 것과 비교하여 데이터를 읽는 빈도, 읽기 및 쓰기 작업의 기간 및 데이터에 대한 경합( 즉, 동시에 데이터를 읽거나 쓰려고 시도하는 스레드 수)에 따라 달라집니다. 예를 들어 처음에는 데이터로 채워지고 그 이후에 자주 수정되지 않는 컬렉션(예: 특정 종류의 디렉터리)은 읽기/쓰기 잠금을 사용하기에 이상적인 후보입니다. 그러나 업데이트가 빈번해지면 데이터는 대부분의 시간을 독점적으로 잠그고 동시성이 증가하는 경우 거의 없습니다. 또한 읽기 작업이 너무 짧으면 읽기-쓰기 잠금 구현(기본적으로 상호 제외 잠금보다 더 복잡함)의 오버헤드가 실행 비용을 지배할 수 있습니다. 특히 많은 읽기-쓰기 잠금 구현이 여전히 코드의 작은 섹션을 통해 모든 스레드를 직렬화하기 때문에 더욱 그러합니다. 궁극적으로 프로파일링 및 측정값만 읽기-쓰기 잠금의 사용이 애플리케이션에 적합한지 여부를 설정합니다.
읽기-쓰기 잠금의 기본 작업은 바로 진행되지만 구현에서 수행해야 하는 많은 정책 결정이 있으며, 이는 지정된 애플리케이션에서 읽기-쓰기 잠금의 효과에 영향을 줄 수 있습니다. 이러한 정책의 예로는 <읽기 잠금을 부여할지 또는 쓰기 잠금을 부여할지 여부를 결정하는 ul><li>결정(읽기 권한자와 작성기 모두 대기 중일 때 기록기가 쓰기 잠금을 해제할 때)이 있습니다. 쓰기가 짧고 드물 것으로 예상되므로 작성기 기본 설정이 일반적입니다. 읽기 권한자가 자주 있고 예상대로 수명이 긴 경우 쓰기가 오래 지연될 수 있으므로 읽기 권한자 기본 설정이 덜 일반적입니다. 공정 또는 따옴표 순서대로(&따옴표) 구현도 가능합니다.
<li>판독기가 활성 상태이고 작성기가 대기하는 동안 읽기 잠금을 요청하는 판독기에 읽기 잠금이 부여되는지 여부를 결정합니다. 판독기에 대한 기본 설정은 작성기를 무기한 연기할 수 있지만 작성기에 대한 기본 설정은 동시성 가능성을 줄일 수 있습니다.
<li>잠금이 재진입되는지 여부를 결정합니다. 쓰기 잠금이 있는 스레드가 다시 가져올 수 있나요? 쓰기 잠금을 유지하면서 읽기 잠금을 획득할 수 있나요? 읽기 잠금 자체가 재진입하나요?
<li>중간 작성기를 허용하지 않고 쓰기 잠금을 읽기 잠금으로 다운그레이드할 수 있나요? 읽기 잠금을 다른 대기 중인 판독기 또는 작성기에 우선하여 쓰기 잠금으로 업그레이드할 수 있나요?
</ul> 애플리케이션에 대해 지정된 구현의 적합성을 평가할 때 이러한 모든 사항을 고려해야 합니다.
1.5에 추가되었습니다.
에 대한 java.util.concurrent.locks.ReadWriteLock
Java 설명서
이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.
속성
Handle |
기본 Android 개체의 JNI 값을 가져옵니다. (다음에서 상속됨 IJavaObject) |
JniIdentityHashCode |
래핑된 인스턴스의 |
JniManagedPeerState |
관리되는 피어의 상태입니다. (다음에서 상속됨 IJavaPeerable) |
JniPeerMembers |
멤버 액세스 및 호출 지원. (다음에서 상속됨 IJavaPeerable) |
PeerReference |
JniObjectReference 래핑된 Java 개체 인스턴스의 값을 반환합니다. (다음에서 상속됨 IJavaPeerable) |
메서드
Disposed() |
인스턴스가 삭제되었을 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
DisposeUnlessReferenced() |
이 인스턴스에 대한 미해결 참조가 없으면 호출 |
Finalized() |
인스턴스가 종료될 때 호출됩니다. (다음에서 상속됨 IJavaPeerable) |
ReadLock() |
읽기에 사용되는 잠금을 반환합니다. |
SetJniIdentityHashCode(Int32) |
에서 반환 |
SetJniManagedPeerState(JniManagedPeerStates) |
A |
SetPeerReference(JniObjectReference) |
에서 반환 |
UnregisterFromRuntime() |
런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 인스턴스의 등록을 취소합니다. (다음에서 상속됨 IJavaPeerable) |
WriteLock() |
쓰기에 사용되는 잠금을 반환합니다. |
확장 메서드
JavaCast<TResult>(IJavaObject) |
Android 런타임 확인 형식 변환을 수행합니다. |
JavaCast<TResult>(IJavaObject) |
A |
GetJniTypeName(IJavaPeerable) |
A |