ABOUT ME

Today
Yesterday
Total
  • 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
Designed by Tistory.