Windows OS - Windows 제공 Reader/Writer lock SRWLock
글 작성자: Sowhat_93
_RTL_SRWLOCK SRWLock;
InitializeSRWLock(&SRWLock);
//Exclusive Lock , 즉 Write Lock.
//Writer 와 공유 X
//Reader 와 공유 X
AcquireSRWLockExclusive(&SRWLock);
ReleaseSRWLockExclusive(&SRWLock);
//Shared Lock, 즉 Read Lock.
//Writer 와 공유 X
//Reader 와 공유 O
AcquireSRWLockShared(&SRWLock);
ReleaseSRWLockShared(&SRWLock);
정말 빠르다.
Reader / Writer Lock을 직접 구현해도 SRWLock보다 빠르기 힘들어 보인다.
CriticalSection 과의 차이가 있다.
CriticalSection은 내부 카운트가 관리된다.
즉 CriticalSection은, 한 스레드에서 여러번 걸 수 있다.
이전에 EnterCriticalSection을 같은 스레드에서 걸었다면,
나중에 그 횟수만큼 LeaveCriticalSection 하면 완전히 풀 수 있다.
SRWLock는 내부 카운트가 존재 하지 않는다.
한번 걸었다면, 무조건 ReleaseSRWLock을 호출해야 한다.
내부 구현은 대략적으로 다음과 같다.
while (0 != InterlockedCompareExchange(Lock, 1, 0))
{
for (int i = 0; !(i & 1024); ++i)
YieldProcessor();
}
Sleep(0) 나 SwitchToThread, YieldProcessor를 충분히 호출해 주도록 하고있다.
확실히 빨라진다.
이 부분에서 Sleep(0) 한번은 부족하구나 하는것을 느꼈다.
'Windows OS' 카테고리의 다른 글
Windows OS - Virtual Memory 사용 VirtualAlloc, VirtualFree (0) | 2022.02.28 |
---|---|
Windows OS - 가상 메모리 주소, 물리 메모리 주소 (0) | 2022.02.25 |
Windows OS - CriticalSection Spinlock으로 사용하기 (0) | 2022.02.20 |
Windows OS - 스레드(Thread) 2편 (0) | 2022.02.01 |
Windows OS - 스레드(Thread) 1편 (0) | 2022.01.12 |
댓글
이 글 공유하기
다른 글
-
Windows OS - Virtual Memory 사용 VirtualAlloc, VirtualFree
Windows OS - Virtual Memory 사용 VirtualAlloc, VirtualFree
2022.02.28 -
Windows OS - 가상 메모리 주소, 물리 메모리 주소
Windows OS - 가상 메모리 주소, 물리 메모리 주소
2022.02.25 -
Windows OS - CriticalSection Spinlock으로 사용하기
Windows OS - CriticalSection Spinlock으로 사용하기
2022.02.20 -
Windows OS - 스레드(Thread) 2편
Windows OS - 스레드(Thread) 2편
2022.02.01