Interlocked는 정수만 제어가능하다는 단점이 있다.
 - 구문을 Atomic하게 제어할 수 있는 무언가가 필요하다.

Monitor를 이용한 Atomic구현
 - 빈 object를 기준으로 Atomic영역의 시작과 끝을 정의할 수 있음.

하지만 코드가 길어질 경우 실수로 return을 하여 Monitor.Exit가 실행이 안되면 프로그램이 멈춰버림
 - Thread_1은 return이후에 정상적으로 실행이 되겠지만, Thread_2의 경우 Thread_1에 의해 잠겨버린 _obj에 의해 동작이 멈춰버리게 된다.
 - Thread_2는  Dead Lock 상태(죽은 자물쇠)
 - 문을 잠그고 안열어준 상태

해결책1.
try - finally
 - 구문을 try로 묶고 finally에 Lock해제구문을 넣게되면 중간에 return을 하더래도 무조건 finally가 실행되어 Lock해제 된다.

해결책2.
"lock"키워드 사용
 - lock내부적으론 위와 같이 Monitor.Enter와 Monitor.Exit로 구현돼 있다.
 - Monitor를 사용하는 것보다 좀더 편리하고 안전하게 Atomic영역을 관리할 수 있다.

'프로그래밍 > 네트워크' 카테고리의 다른 글

Spin Lock 개선  (0) 2021.09.02
SpinLock  (0) 2021.09.01
Race Condition  (0) 2021.08.29
Cache  (0) 2021.08.27
Thread의 생성  (0) 2021.08.27

+ Recent posts