class Reward
{
    static ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();

    // id를 조회하여 그에 맞는 리워드를 주는 함수
    static Reward GetRewardByid (int id)
    {
        lock (_lock)
        {

        }
        return null;
    }
    // 리워드를 추가하는 함수, 자주 사용 안하는 함수   
    static void AddReward (Reward reward)
    {
        lock(_lock)
        {

        }
    }
}

게임에서 리워드가 있고 이를 받는 경우와 리워드를 추가하는 경우가 있다면 받는 경우가 대부분이며, 추가하는 경우는 극히 드물다.
이 경우 둘다 Lock을 거는것은 효율성의 문제가 된다.
 

class Reward
{
    static ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();

    // id를 조회하여 그에 맞는 리워드를 주는 함수
    static Reward GetRewardByid (int id)
    {
        _lock.EnterReadLock();
        _lock.ExitReadLock();
        return null;
    }
    // 리워드를 추가하는 함수, 자주 사용 안하는 함수   
    static void AddReward (Reward reward)
    {
        _lock.EnterWriteLock();
        _lock.ExitWriteLock();
    }
}

이 경우 ReaderWriterLockSlim을 사용
 
WriteLock이 걸리지 않은 상태에서는 Read가 자유롭게 가능하지만 WriteLock이 걸린 상태라면 Read에도 Lock이 걸린다.

'네트워크' 카테고리의 다른 글

소켓 프로그래밍 - TCP 소켓  (0) 2023.09.10
ReaderWriterLock 구현  (0) 2023.08.05
AutoResetEvent  (0) 2023.08.03
SpinLock  (0) 2023.08.02
DeadLock  (0) 2023.08.01

+ Recent posts