inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

JobTimer

32:55초 질문 있습니다.

299

GODOT

작성한 질문수 38

0

32:55초 

28째줄 (jobtimer.cpp 궁금한게 있습니다.)

28번째 줄에 WRITE_LOCK 하기전에 중괄호를 쳤는데

어떤 상황에 의해 LOCK 잡은 곳(괄호)을 지나서 

 

그 괄호 밖의 for문이 실행될 수 있다는 말인가요?

그래서 _distributing 으로 막는거라 이해 하면 되는건가요?

괄호가 없음 상관이 없을까요?

 

 

 

스레드 network windows-server MMORPG

답변 1

1

Rookiss

멀티쓰레드 환경이라면 같은 함수를
여러 쓰레드가 막 동시에 호출할 수도 있는데요.
어떤 쓰레드에서 함수 흐름대로 쭉 실행해서 LOCK을 지나치게 아래부분을 실행하는데
다른 쓰레드가 동시에 실행되면 LOCK 관련 부분을 실행하고 있을 수 있겠죠.
전체 LOCK을 잡으면 이 문제는 해결되지만
대신 한 애가 실행할 때 다른 애들은 아예 실행을 못하고 대기하게 됩니다.

0

GODOT

아 제가 궁금한점이 { } 괄호를 기준으로 Lock 잡히는 건지 lock 잡은 부분부터 --- 함수의 } 괄호가 보일때까지 잡힌건지

잘 모르겠어서 질문드렸네요. 찾아보니 {} 괄호기준(scope)으로 잡히는것 같은데 맞는가요?

 

아 해보니깐 괄호기준이 맞네요.,

2번 들으려고 계속 눈팅만 했더니...

void Add() {

{

lock_guard<mutex> guard(m);

for (int i = 0; i < 10; ++i) {

sum++;

cout << "a : " << sum << endl;

}

}

 

for (int i = 0; i < 20; ++i) {

sum++;

cout << "c : " << sum << endl;

}

}

 

void Sub() {

{

lock_guard<mutex> guard(m);

for (int i = 0; i < 10; ++i) {

sum--;

cout << "b : " << sum << endl;

}

}

}

 

해결되었습니다!!^^

 

컨텐츠 레이어 C++ vs C#

0

10

0

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

0

31

2

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

0

70

2

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

0

125

1

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

0

64

1

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

0

85

2

성능 테스트 결과

0

105

2

게임 서버 Stateful, Stateless 진로 고민

0

127

1

WaitOnAddress와 Sleep의 차이 질문

0

84

1

궁금한거 있습니다.

0

83

2

JobTimer 구동 스레드

0

107

2

TryPop() 동작 관련 질문

0

81

1

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

0

151

2

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

0

73

1

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

0

87

2

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

0

143

2

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

0

103

2

mutex와 sleep 차이점

0

119

1

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

0

156

2

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

0

97

1

공부법 관련해서

0

184

2

MakeShared 함수 관련

0

114

1

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

0

144

2

운영체제관련 질문입니다

0

132

1