SRW(슬림 판독기/작성기) 잠금
SRW(슬림 판독기/기록기) 잠금을 사용하면 단일 프로세스의 스레드가 공유 리소스에 액세스할 수 있습니다. 속도에 최적화되어 있고 메모리가 거의 차지하지 않습니다. 슬림 판독기-작성기 잠금은 프로세스 간에 공유할 수 없습니다.
읽기 권한자 스레드는 공유 리소스에서 데이터를 읽는 반면 기록기 스레드는 공유 리소스에 데이터를 씁니다. 공유 리소스를 사용하여 여러 스레드를 읽고 쓰는 경우 판독기 스레드가 지속적으로 실행되지만 쓰기 작업이 드물면 중요한 섹션 또는 뮤텍스와 같은 배타적 잠금이 병목 상태가 될 수 있습니다.
SRW 잠금은 스레드가 공유 리소스에 액세스할 수 있는 두 가지 모드를 제공합니다.
공유 모드는 공유 리소스에서 동시에 데이터를 읽을 수 있도록 여러 판독기 스레드에 대한 공유 읽기 전용 액세스 권한을 부여합니다. 읽기 작업이 쓰기 작업을 초과하는 경우 이 동시성은 중요한 섹션에 비해 성능 및 처리량을 향상합니다.
참고
공유 모드 SRW 잠금은 단독 구입과 결합될 때 교착 상태가 발생할 수 있으므로 재귀적으로 획득해서는 안 됩니다.
한 번에 하나의 기록기 스레드에 대한 읽기/쓰기 액세스 권한을 부여하는 전용 모드입니다. 잠금을 단독 모드로 획득하면 기록기가 잠금을 해제할 때까지 다른 스레드가 공유 리소스에 액세스할 수 없습니다.
참고
단독 모드 SRW 잠금은 재귀적으로 가져올 수 없습니다. 스레드가 이미 보유하고 있는 잠금을 획득하려고 하면 해당 시도가 실패합니다( TryAcquireSRWLockExclusive의 경우) 또는 교착 상태( AcquireSRWLockExclusive의 경우).
단일 SRW 잠금은 어느 모드에서든 획득할 수 있습니다. 판독기 스레드는 공유 모드에서 획득할 수 있는 반면 기록기 스레드는 전용 모드에서 획득할 수 있습니다. 소유권을 요청하는 스레드에 소유권이 부여되는 순서는 보장되지 않습니다. SRW 잠금은 공정하지도 FIFO도 아닙니다.
SRW 잠금은 포인터의 크기입니다. 장점은 잠금 상태를 빠르게 업데이트할 수 있다는 것입니다. 단점은 상태 정보를 거의 저장할 수 없으므로 SRW 잠금이 공유 모드에서 잘못된 재귀 사용을 감지하지 않는다는 것입니다. 또한 공유 모드에서 SRW 잠금을 소유하는 스레드는 잠금의 소유권을 배타적 모드로 업그레이드할 수 없습니다.
호출자는 SRWLOCK 구조를 할당하고 InitializeSRWLock (구조체를 동적으로 초기화하기 위해)을 호출하거나 구조 변수에 상수 SRWLOCK_INIT 할당하여 초기화해야 합니다(구조체를 정적으로 초기화하려면).
Application Verifier를 사용하여 SRW 잠금의 재귀(재진입) 사용을 찾을 수 있습니다.
다음은 SRW 잠금 함수입니다.
SRW 잠금 함수 | 설명 |
---|---|
AcquireSRWLockExclusive | 전용 모드에서 SRW 잠금을 획득합니다. |
AcquireSRWLockShared | 공유 모드에서 SRW 잠금을 획득합니다. |
InitializeSRWLock | SRW 잠금을 초기화합니다. |
ReleaseSRWLockExclusive | 전용 모드로 열린 SRW 잠금을 해제합니다. |
ReleaseSRWLockShared | 공유 모드에서 열린 SRW 잠금을 해제합니다. |
SleepConditionVariableSRW | 지정된 조건 변수에서 절전 모드로 전환하고 지정된 잠금을 원자성 작업으로 해제합니다. |
TryAcquireSRWLockExclusive | 전용 모드에서 SRW(슬림 판독기/기록기) 잠금을 획득하려고 시도합니다. 호출에 성공하면 호출 스레드가 잠금의 소유권을 맡습니다. |
TryAcquireSRWLockShared | 공유 모드에서 SRW(슬림 판독기/기록기) 잠금을 획득하려고 시도합니다. 호출에 성공하면 호출 스레드가 잠금의 소유권을 맡습니다. |