반응형

RWLock 2

Part 4-2-14. 멀티쓰레드 프로그래밍 : ReaderWriterLock 구현 연습

멀티 쓰레드 ReaderWriterLock을 구현해보자! 먼저 소스코드가 길어질 수 있으므로 ServerCore의 새로운 스크립트를 Lock.cs로 만들어주자. namespace ServerCore { class Lock { int _flag; } } 새로운 플래그를 위와 같이 설정하자. 플래그는 int형 변수를 사용하기 때문에 32비트를 가지게 된다. 우리는 32비트의 구조를 이용하여 Write의 영역과 Read의 영역을 구분할 것이다. 맨 앞의 1번 비트는 사용하지 않는다. 왜냐하면 해당 값을 사용하게 되면 음수의 값을 사용하기 때문이다. 따라서 우리는 2번 비트부터 16번 비트까지는 WriteThreadID의 영역을 이용해 쓰레드 아이디를 저장하고, 17번 비트부터 32번 비트까지는 ReadCoun..

Part 4-2-13. 멀티쓰레드 프로그래밍 : ReaderWriterLock

멀티 쓰레드 복습! 🤠 락을 구현하는 때에는 3가지 방법이 있다. 1. 근성, 2. 양보, 3. 갑질. ❗ 근성은 계속 빙글빙글 lock을 돌며 대기하는 것이고, 양보는 잠시 쉬었다가 다시 와서 획득 시도를 요청하는 것이다. 마지막으로 갑질은 직원을 시켜 알려달라 요구하는 것이다. 일전에 얘기했던 것과 같이 3가지 방법 중 뭐가 가장 좋고, 나쁘다 라고 말할 수 없으며 각각의 장점이 각각의 단점을 보완하는 형태이기 때문에 본인에게 필요한 방법을 사용하기로 하자. 그 동안 사용했던 Lock Lock 👉 내부적으로 Monotor 클래스를 이용해 편리하게 사용 가능한 락이다. (상호배제) static object key = new object(); static void Main(string[] args) { ..

반응형