개인공부) 서버실습(10) - Lock 구현 이론

Justin·2022년 6월 1일
0

서버공부

목록 보기
9/45

✅ 지난 시간

DeadLock이 발생할 수 있는 두 번째 예제를 통해 어떻게 해결할 수 있을지에 대한 해결방법이었다. 하지만 아직 Lock을 정확하게 구현해본게 아니라, 감이 잘 잡히지 않았는데 이제 부터 제대로 배울 수 있을 거 같다.

Lock의 세가지 동작 상태

무한 대기하기(Spine Lock)
이미 차지되어있는 Lock에 접근하기 위해 빙글뱅글 돌면서 Lock이 비어있는지 계속 체크하는 상태

  • 언제까지 대기해야하는지 끝을 알 수 없다.
  • 크게 하는 일은 없어보이지만, 쓰레드가 계속 대기하는게 자원 소모가 적지 않다.

랜덤한 시간마다 와서 체크하기(Context Switching)
자리로 돌아가서 랜덤한 시간마다 다시 와서 비어있느 체크하기

  • 운이 좋으면 편하게 바로 사용할 수도 있다.
  • 자리를 비운 사이에 다른 쓰레드가 와서 차지할 가능성도 있다

직원에게 부탁하고 자리에 가기(Auto Reset Event)
제 3자인 직원에게 부탁하여 자리가 비면 알려달라고 요청하는 방식

  • 부탁하는 쓰레드 입장에서는 굉장히 편하고 효율적이다.
  • 일을 해야하는 직원 입장에서는 힘들고 귀찮은 일이다.

💾 오늘 정리

Lock을 어떤식으로 활용하면 좋을지에 대한 감이 조금 더 오기 시작한다. 멀티쓰레드에서 Lock 처리하는게 60% 정도 차지할 정도로 중요하다니, 꼼꼼하게 해봅세

profile
인디 게임을 만들며 공부하고 있습니다.

0개의 댓글