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

김종민님의 프로필 이미지
김종민

작성한 질문수

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

Lock 기초

lock 사용에 있어 근본적 질문

해결된 질문

작성

·

230

1

안녕하세요 강의 잘 듣고 있습니다.

전역변수 사용에 있어 원자화 되지 않은 함수들로 인한 race condition 문제로 저희가 원하지 않는 값들이 return 되기에 lock을 사용하여 해당 lock동안에는 다른 Thread의 사용을 방지한다고 이해하였습니다.

그렇기 때문에 lock의 사용이 빈번해진다면 전반적으로 코드의 구성도 복잡해지고 성능 측면에서도 좋지 못하다 이해하였고, 그렇다면 lock의 사용은 변수를 공유하지 않는 부분에서는 필요치 않을까? 하는 의문이 들었습니다.

나아가 만약 lock을 사용하는 Thread가 있다면, 그 기간 동안에는 lock을 사용하지 않는 다른 Thread들 도 lock의 명령어들이 끝날 때까지 기다려야 하는 것인지 궁금합니다.

 

답변 1

1

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

그렇기 때문에 lock의 사용이 빈번해진다면 전반적으로 코드의 구성도 복잡해지고 성능 측면에서도 좋지 못하다 이해하였고, 그렇다면 lock의 사용은 변수를 공유하지 않는 부분에서는 필요치 않을까? 하는 의문이 들었습니다.
-> 네 당연히 데이터 경합이 일어나지 않으면 사용할 이유가 전혀 없습니다.

나아가 만약 lock을 사용하는 Thread가 있다면, 그 기간 동안에는 lock을 사용하지 않는 다른 Thread들 도 lock의 명령어들이 끝날 때까지 기다려야 하는 것인지 궁금합니다.
-> 네 그렇습니다. 공유 데이터에서 lock을 걸면 최대한 빨리 볼 일 보고 풀어줘야 하는데,
이런 저런 이유로 lock을 오래 잡고 있으면 나머지 쓰레드는 대기를 타게 됩니다.

김종민님의 프로필 이미지
김종민

작성한 질문수

질문하기