반응형
인프런 - Rookies님의 강의
https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part4
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 - 인프런 | 강의
네트워크/멀티쓰레드/운영체제 등 핵심 전공 지식을 공부하고 게임 서버를 바닥부터 만들어보면서 MMORPG 기술을 학습하는 강의입니다., MMORPG 개발에 필요한 모든 기술, C# + Unity로 Step By Step! 🕹
www.inflearn.com
ResetEvent
커널에서 관리하는 bool값이라고 생각하면 된다.
사용법
인자로 InitialState(boolean)를 받음(초기 lock 상태)
AutoResetEvent _available = new AutoResetEvent(boolean 인자);
ManualResetEvent _available = new ManualResetEvent(boolean 인자);
AutoResetEvent
lock을 잠그는 행동을 자동으로 해준다.
class Lock
{
AutoResetEvent _available = new AutoResetEvent(true);
public void Acquire()
{
_available.WaitOne(); // 입장 시도
//_available.Reset(); // bool = false, WaitOne()에 포함되어 있어서 따로 사용 X
}
public void Release()
{
// 아까 잠근 lock 불리언을 true로 바꿔줌
_available.Set(); // bool = true
}
}
ManualResetEvent
자동으로 lock을 잠궈주지 않는다.
=> Reset()으로 수동으로 잠궈주어야 하는데, 이러면 원자성이 지켜지지 않아 lock 구현에서는 사용하기 힘들다
그렇다면 언제 사용할까? -> 쓰레드를 한번에 하나씩만 사용해야 할 피룡가 없을 때 사용
ManualResetEvent _available = new ManualResetEvent(true);
public void Acquire()
{
_available.WaitOne(); // 입장 시도, 자동으로 안잠김
_available.Reset(); // bool = false, 수동으로 잠금
}
public void Release()
{
// 아까 잠근 lock 불리언을 true로 바꿔줌
_available.Set(); // bool = true
}
반응형
'C# > C# 서버' 카테고리의 다른 글
[C#/서버] 기초 소켓 프로그래밍 (0) | 2023.08.22 |
---|---|
[C#/서버] ReaderWriterLock (0) | 2023.08.22 |
[C#/서버] SpinLock (0) | 2023.08.18 |
[C#/서버] 메모리 배리어 (0) | 2023.08.16 |
[C#/서버] 캐시 이론 (0) | 2023.08.16 |