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

usaisdie님의 프로필 이미지
usaisdie

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Lock-Free Stack #1

lock free에 대해서 잘 이해가 가지 않습니다

작성

·

547

0

lock free는 단순하게 "lock을 사용하지 않는다." 정도로만 알고 있는 상태입니다.

그런데 코드를 보니까 compare_exchange_weak 를 사용하고 이 코드가 스핀락과 상당히 유사하단 생각이 들었는데
"스핀락은 lock아닌가? 그럼 lock free가 아닌게 아닌가?" 하는 생각이 들더라구요.

제가 잘못 이해한건가요?

답변 1

0

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

네 사실 경계가 애매한데요.
Lock-Free는 Lock을 명시적으로 사용하지 않는다는 것은 맞지만
어차피 쓰레드 경합 방지 차원에서 CAS 류의 코드는 들어가야 합니다.

LockFreeQueue의 경우 데이터가 충분히 있다면 Push/Pop이 서로 영향을 주지 않으므로
Lock을 잡는 방식에 비해 조금 이점이 있을 수는 있긴 합니다.
그러나 서버에서 [우리는 LockFree 구조!!]라고 자랑한다고
그게 정말 효율적이라는 보장은 없고 오히려 Lock을 잡는게 좋을 수도 있습니다.
LockFree 외에도 WaitFree라는 용어도 종종 등장하는데
무한 뺑뺑이를 돌면서 CAS를 하지 않는 상황을 얘기합니다.

마지막으로 Lock을 구현하는 여러가지 방식 중에 스핀락도 포함이 되는 것이라
[스핀락은 Lock이 아닌가?]는 맞지 않습니다.

usaisdie님의 프로필 이미지
usaisdie
질문자

결국 Lock Free 라고 해도 Lock의 느낌이 단 한개도 들어가지 않는다는건 아닌거군요

그럼 사실상 Lock과 Lock Free를 구분짓는게 그렇게 큰 의미가 없을 수도 있겠네요

usaisdie님의 프로필 이미지
usaisdie

작성한 질문수

질문하기