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

운영체제 - C# Lock구현 연습

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

화장실에 이미 사람이 있다면 대기할 수 있는 방법을 알아보자

01 무작정 기다리기

화장실안에 사람이 있으면 계속해서 대기하는 방식이다.

단점 - 안에 있는 사람이 안나온다면 계속 시간이 허비된다.


02 일단 자리로 왔다가 다시 랜덤 시간 후 다시 가본다.

단점 - 랜덤성이 강해서 자리로 돌아오자 사람이 나오는 경우도 있고 다른 누군가가 기다리는 경우가 생기면 더 오래걸릴 수도 있다.


03 직원한테 화장실이 비면 알려주세요 라고 부탁한다.

장점 : 기다리는 시간이 없다.

단점 : 직원을 거쳐 한 단계를 건너야 한다. 만약에 대기자가 많았을 경우 직원한테 


락을 구현할때 누군가가 이미 차지하고 있으면 어떻게 해야할까?

01 무작정 기다린다.(스핀락)

쓰레드가 계속 반복하여 확인하는 방식으로 동작한다.

단점 : 무한루프를 계속 돌고 있기 때문에 Cpu점유율이 높아지게 된다.


SpinLock(스핀락) 알아보러 가기

 

운영체제 - SpinLock(스핀락) - Test-and-Set, Compare-and-Swap

SpinLock(스핀락) 동기화 기법 중 하나로 여러 쓰레드가 공유자원에 접근한느 것을 제어하기 위해 사용된다. race condition을 해결하고 mutal exclusion을 구현하기 위해 이용된다. 스핀락 구현 class SpinLock

code-piggy.tistory.com


02 Backoff

쓰레드가 리소스에 대한 접근이 불가능할 때, 일정 시간 동안 대기한 후 다시 확인하는 방식이다. Thread.Sleep 사용하고 대기 시간은 랜덤으로 선택할 수도 있다.


Backoff 알아보러 가기

 

운영체제 - Backoff(Thread.Sleep(0), Thread.Yield())

이 코드를 실행한 다음에 실패했을때 어떤 행동을 취하는 것이 락을 구현할때 어떤 방법을 사용할지를 결정하게 된다. int expected = 0; int desire = 1; int original = Interlocked.CompareExchange(ref _locked, desire,

code-piggy.tistory.com


03 제 3자에게 부탁하기(이벤트)

제 3자에게 도움을 요청하여 리소스 접근을 기다리는 방식이다. 이벤트가 발생하면 제 3자가 나에게 통보를 하는 방식이다.

2번과 다른점은 무작정 기다리는 것이 아니라 자기 차례가 오면 깨어난다.

 


제 3자에게 부탁하기(이벤트)

 

운영체제 - 제3자에게 부탁하기(AutoResetEvent,Manualresetevent )

제3자에게 부탁하기(event) 리소스 접근 제어 방식중 하나이다. 특정 이벤트가 발생할때까지 대기한 다음 이벤트가 발생하면 제3자가 알려주는 방식으로 작동한다. 제3자가 커널레벨에 존재하는

code-piggy.tistory.com

 

 

 

 

 

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

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

반응형

댓글