본문 바로가기
cs공부/운영체제

운영체제 - 임계구역,동기화(Monitor,try-finally,lock)

by 코딩하는 돼징 2023. 5. 16.
반응형

Interlocked계열이 성능도 빠르고 우수하지만 정수만 사용할 수 있다는 단점이 있다.

 

임계구역 (Critical Section)

Atomic 실행을 위하여 각 프로세스 혹은 쓰레드가 공유변수, 자료구조, 파일 등을 배타적으로 읽고 쓸 수 있도록 설정한 코드 세그먼트 또는 영역

임계 구역에 진입하는 쓰레드는 다른 쓰레드와의 동시 접근으로부터 상호배제(Mutal Exclusive) 되야 한다.

예시 - 화장실에 들어갈 때 문을 잠그고, 나올때에 여는 것

 

임계구역에 대한 요구사항

01 상호 배제(mutal exclusion)

한 프로세스가 임계 구역을 실행 중일때, 다른 어떤 프로세스도 임계 구역을 실행할 수 없다.

02 진행(Process)

임계구역 안에 반드시 하나의 프로세스를 선택하여 진입시키는 올바른 결정 기법이 있어야 하고, 이러한 결정은 무한정 미루어 져서는 안된다.

03 제한된 대기(bounded waiting)

한 프로세스가 임계 구역에 대한 진입 요청 후부터 요청의 수락까지의 기간 내에, 다른 프로세스가 임계 구역을 실행할 수 있는 회수에는 제한이 있어야 한다.


동기화(Synchronization)

임계 구역을 관리하기 위해 필요한 동기화

코드 상에 임계구역을 설정하여 진입/진출을 순서화(Serialize) 하는 것 - 코드 상으로는 독립적이지만 실행 상황에서 선행 제약을 만드는 것에 해당


Monitor 클래스

C#에서 동기화를 구현하기 위해서 사용되어지는 Monitor 클래스

1. Monitor.Enter

임계구역에 진입 - 화장실 문을 잠금

public static void Enter (object obj);

매개변수

obj - 열쇠 역할

2. Monitor.Exit

임계구역에서 나옴 - 화장실에서 나오면서 잠금을 해제

public static void Exit (object obj);

매개변수

obj - 열쇠 역할


Code 예시

static void Thread()
{
    Monitor.Enter(_obj);
    number--;
    Monitor.Exit(_obj);
}

만약 임계구역 안에서 return이 된다면 어떻게 될까?

화장실로 예를 들자면 화장실 문을 잠그고 잠들어 버린 상황이다. 그러므로 문이 영영 잠겨버리면서 DeadLock(무한히 대기 하는 상황)이 발생한다.

static void Thread()
{
    Monitor.Enter(_obj);
    number--;
    return;
    Monitor.Exit(_obj);
}

예방하는 방법

01 try -  finally문

finally를 통해서 무조건 임계구역에 빠져나오게 한다.


exception 알아보러 가기

 

C# 문법 - exception

1. exception 예기치 못한 예외적인 것을 처리 (예를 들어 0으로 나눌때, 잘못된 메모리를 참조, 오버플로우 등이 있다.) 2. try - catch try - 예외가 발생 되었을 시 catch문으로 catch - 예외 발생시 처리하

code-piggy.tistory.com


try
{
    Monitor.Enter(_obj);
    number++;
    return;
}
finally
{
    Monitor.Exit(_obj);
}

02 lock문 사용

lock문은 암묵적으로 Monitor 클래스의 Enter를 호출하여 lock을 획득하고 코드 블록을 실행한 후 finally에서 Monitor.Exit메서드를 호출하여 lock을 해제한다. 

lock(_obj)
{
    number++;
    return;
}

위의 코드는 아래와 같이 컴파일러에의해 변환된다.

try
{
    Monitor.Enter(_obj);
    number++;
    return;
}
finally
{
    Monitor.Exit(_obj);
}

이러한 암묵적인 호출 덕분에 코드를 간결하게 작성할 수 있다.

 

 

 

 

참고 :  본 내용은 MMORPG  PART4 강의를 수강하여 작성하였습니다.

https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part4

반응형

댓글