글 작성자: 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) 한번은 부족하구나 하는것을 느꼈다.