인프런 커뮤니티 질문&답변

Hyobin Kim님의 프로필 이미지
Hyobin Kim

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

SpinLock

Interlocked를 통한 원자성 보장

작성

·

214

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 

멀티스레딩에 관해서 큰줄기를 잡아가는 중입니다

멀티 스레딩의 기본적인 개념과 쓰임새는 이해를 했습니다.

멀티 스레딩을 사용할 경우에 겪을 수 있는 오류, 즉 다수의 스레드의 경합에 의해서 데드락에 걸리는 경우도 이해를 했습니다.

거기다, 해당 오류에 대한 해결책이 경합시 원자성을 바탕으로, 목표 프로세스는 하나의 스레드에 의해 처리되고 나머지 스레드는 대기하게 만드는 거라고 이해했습니다.

(혹시 제가 잘 못 이해한거라면 고쳐주세요!)

 원자성을 보장하는 방법에 관해서 제 예상과 강의가 조금 달라서요

강의 초반에 해주신 설명과, 의사코드로 보여주신거로 봐서 처음에는 이 원자성을 보장하는 방법도 C#코드로 구현이 될 거라고 생각했는데, C#에서 마련된 InterLocked 클래스를 쓰시더라고요

거기다 의사코드로 설명하실 때, 이건 이렇게 몇줄로 나눠진 거라서, 화장실에 동시에 2명이 들어가는 가능성이 있다라고 하셨는데 InterLocked를 쓰니까 같은 내용인데 해당 오류가 방지되는걸 보고서 다음과 같은 생각이 들더라고요

원자성은 다른 스레드가 침범할 수 없는 하나의 막을 두루는 것이며

 InterLocked클래스가 바로 이 보호막을 둘러달라고 C#에 마련되어 있는 CPU에게 요청하는 방법이 아닌가 싶습니다.

혹시 제가 이해를 똑바로 한 걸까요? 

 

답변 1

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 맞습니다.
'보호막'은 약간 추상적이지만, 실제로 비슷한 느낌으로
CPU에서 locked 계열 특수 명령어가 있어서
다중으로 실행되는 것을 방지합니다.

Hyobin Kim님의 프로필 이미지
Hyobin Kim
질문자

답변 감사합니다 

한가지 더 궁금한게, 의사코드로 설명해주실때, 이게 3줄이라서 이 사이에 끼어든거다라는 늬앙스로 처음에는 이해를 했거든요

그런데 지금 설명을 들어보니까 몇줄이건 관계없이 CPU에서 locked계열 명령어가 적용되면 해당 부분은 원자성이 보장되는건가요?

 

Rookiss님의 프로필 이미지
Rookiss
지식공유자

네 그렇습니다. 말 그대로 특수한 명령어이죠.

Hyobin Kim님의 프로필 이미지
Hyobin Kim

작성한 질문수

질문하기