inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Lock-Free Stack #1

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

733

usaisdie

작성한 질문수 6

0

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

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

제가 잘못 이해한건가요?

network MMORPG windows-server

답변 1

0

Rookiss

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

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

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

0

usaisdie

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

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

writeLock을 잡을때 꼭 empty 상태여야하는 이유?

0

67

2

Memory Pool에서 오버플로우 질문입니다.

0

98

2

포토폴리오 및 진로 관련하여 고민입니다.

0

181

1

포토폴리오 관련 고민입니다.

0

97

1

실무에서도 alloc, 스마트포인터 등을 구현해서 쓰는지 궁금합니다.

0

110

2

성능 테스트 결과

0

118

2

게임 서버 Stateful, Stateless 진로 고민

0

152

1

WaitOnAddress와 Sleep의 차이 질문

0

106

1

궁금한거 있습니다.

0

93

2

JobTimer 구동 스레드

0

119

2

TryPop() 동작 관련 질문

0

87

1

로드맵 C#서버 C++서버 방향성 질문

0

169

2

스레드 id를 출력할떄 메인스레드 id도 출력되나요?

0

83

1

생명주기를 위한 의도적 복사

0

99

2

락프리의 실무에서 사용 질문

0

157

2

32bit threadID와 16비트 상위 WriteFlag에 대해

0

110

2

mutex와 sleep 차이점

0

133

1

실무에서는 어떠한 코드 스타일을 사용하는지 궁금합니다

0

169

2

Stomp Allocator의 Release함수에 대한 질문입니다.

0

102

1

공부법 관련해서

0

191

2

MakeShared 함수 관련

0

119

1

지금까지 서버코어에서 만든 내용에 대해 궁금한 점이 있어서 질문 드립니다.

0

153

2

운영체제관련 질문입니다

0

147

1

send하려는 데이터 크기가 크면 memcpy에서 문제가 발생할 것 같습니다.

0

125

2