반응형

3

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) { ..

Part 4-2-9. 멀티쓰레드 프로그래밍 : Lock 구현 이론

멀티 쓰레드 Lock 구현 이론 오늘의 주제는 락 구현 연습이다. 멀티쓰레드 프로그래밍의 락의 비중은 6-70%를 차지할 정도로 매우 중요하다. 따라서 락의 동작방식을 이해하는 것은 매우 중요하다. 물론 언어와 프레임워크에 따라 조금씩 다르겠지만, 근본적인 구조와 동작 방법은 유사할 것이다. 오늘도 비유를 이용하여 Lock 구현 이론에 대해서 알아보자. 이전 시간에서 락의 구현은 화장실을 갔다오는 것과 유사하다고 했다. 예를 들어보자. 우리는 화장실에 갔는데 누군가 화장실 안에서 사용하고 있어 문을 잠군 상태이다. 따라서 우리는 안에 사람이 나오기를 기다리고 있는 상황이라고 가정해보자. 즉. 화장실이 급해서 왔는데 문이 잠겨있는 상태인 것이다. 그렇다면 우리는 이 때 어떻게 행동할까? 1. 무작정 기다리..

반응형