반응형
화장실에 이미 사람이 있다면 대기할 수 있는 방법을 알아보자
01 무작정 기다리기
화장실안에 사람이 있으면 계속해서 대기하는 방식이다.
단점 - 안에 있는 사람이 안나온다면 계속 시간이 허비된다.
02 일단 자리로 왔다가 다시 랜덤 시간 후 다시 가본다.
단점 - 랜덤성이 강해서 자리로 돌아오자 사람이 나오는 경우도 있고 다른 누군가가 기다리는 경우가 생기면 더 오래걸릴 수도 있다.
03 직원한테 화장실이 비면 알려주세요 라고 부탁한다.
장점 : 기다리는 시간이 없다.
단점 : 직원을 거쳐 한 단계를 건너야 한다. 만약에 대기자가 많았을 경우 직원한테
락을 구현할때 누군가가 이미 차지하고 있으면 어떻게 해야할까?
01 무작정 기다린다.(스핀락)
쓰레드가 계속 반복하여 확인하는 방식으로 동작한다.
단점 : 무한루프를 계속 돌고 있기 때문에 Cpu점유율이 높아지게 된다.
SpinLock(스핀락) 알아보러 가기
02 Backoff
쓰레드가 리소스에 대한 접근이 불가능할 때, 일정 시간 동안 대기한 후 다시 확인하는 방식이다. Thread.Sleep 사용하고 대기 시간은 랜덤으로 선택할 수도 있다.
Backoff 알아보러 가기
03 제 3자에게 부탁하기(이벤트)
제 3자에게 도움을 요청하여 리소스 접근을 기다리는 방식이다. 이벤트가 발생하면 제 3자가 나에게 통보를 하는 방식이다.
2번과 다른점은 무작정 기다리는 것이 아니라 자기 차례가 오면 깨어난다.
제 3자에게 부탁하기(이벤트)
참고 : 본 내용은 MMORPG PART4 강의를 수강하여 작성하였습니다.
https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part4
반응형
'cs공부 > 운영체제' 카테고리의 다른 글
운영체제 - Semaphore(세마포어), Mutex(뮤텍스) (0) | 2023.05.23 |
---|---|
운영체제 - SpinLock(스핀락) - Test-and-Set, Compare-and-Swap (0) | 2023.05.22 |
운영체제 - DeadLock(데드락) (0) | 2023.05.22 |
운영체제 - Peterson's Solution, Bakery 알고리즘(상호배제 문제 해결) (0) | 2023.05.16 |
운영체제 - 임계구역,동기화(Monitor,try-finally,lock) (0) | 2023.05.16 |
댓글