-
ReaderWriterLock게임서버/멀티쓰레드 프로그래밍 2022. 3. 11. 21:56
1. ReaderWriterLock
락을 덮어쓰는 경우도 있다.
기능적으로 비슷한 1번함수와 2번함수가 있다고 가정했을 때
1번함수가 평상시에 사용되고, 특수한 경우에는 2번함수가 사용된다고 가정하고, 1번함수와 2번함수는 동시에 사용될 수 없다고 가정해보자.
그러면 평상시에 1번함수가 사용되다가 2번함수가 사용되는 순간이 오면 1번함수의 락이 접근이 불가능해져야한다.
그럴 때 2번함수에 1번함수의 락을 덮어씌울 수 있는데 그것이 바로 ReaderWriterLock이고 RW락이라고도 불린다.
class Program { // 최신버전 RW락 static ReaderWriterLockSlim _lock3 = new ReaderWriterLockSlim(); class Reward { } // 99.99%의 일반적인 경우 static Reward GetRewardById(int id) { _lock3.EnterReadLock(); // 평상시에는 Read를 사용 _lock3.ExitReadLock(); return null; } // 00.01%dml 특수한 경우 static void AddReward(Reward reward) { _lock3.EnterWriteLock(); // 덮어씌울때는 Write를 사용 _lock3.ExitWriteLock(); } }
'게임서버 > 멀티쓰레드 프로그래밍' 카테고리의 다른 글
오토리셋이벤트(AutoResetEvent) (0) 2022.03.11 컨텍스트 스위칭(Context Switching) (0) 2022.03.11 스핀락(SpinLock) (0) 2022.03.11 Lock 구현 이론 (0) 2022.03.11 데드락 (0) 2022.03.10