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 |