더북(TheBook)

1.16.3 너무 좁은 잠금 범위

잠금 객체 범위가 너무 넓으면 컨텍스트 스위치가 발생할 때 운영체제가 해야 할 일이 매우 많아집니다. 그리고 처리 병렬성이 떨어지기 때문에 멀티스레드 프로그래밍의 이유가 퇴색되기도 합니다.

잠금 범위를 좁히면 컨텍스트 스위치의 확률이 떨어지기는 합니다. 그러나 임계 영역 잠금이 컨텍스트 스위치보다는 훨씬 적더라도 단순한 산술 연산보다는 더 많은 처리 시간을 차지합니다.9 따라서 임계 영역을 적당한 수준에서 나누면 좋습니다.

class A
{
  int a;
  mutex a_mutex;
 
  int b;
  mutex b_mutex;
};

이 예시 코드는 클래스 멤버 변수 각각에 잠금을 하고 있습니다. 지나치게 잘게 자른 케이스입니다.

 

9 임계 영역 잠금과 잠금 해제는 1회 이상의 원자 조작(atomic operation)을 합니다. 원자 조작은 통상적인 메모리 액세스보다 시간을 몇 배나 차지합니다. 여러 CPU가 같은 메모리를 원자 조작하는 경우 시간이 수십 배 걸리기도 합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.