더북(TheBook)

1.16.7 일관성 규칙 깨기

잠금 범위가 여럿일 때 여러분이 정의하는 일관성 규칙을 깨는 실수를 범하기도 합니다. 예를 들어 다음과 같이 연결 리스트(linked list) 자료 구조 변수와 연결 리스트의 항목 개수를 나타내는 변수가 있는데, 각각이 서로 다른 뮤텍스나 임계 영역으로 보호된다고 치겠습니다.

class Node
{
  Node* next;
};
 
Node* list = null;
int listCount = 0;
 
mutex listMutex;
mutex listCountMutex;
 
void func()
{
  lock(listMutex);
  Node* newNode = new Node();
  newNode->next = list;
  list = newNode;
  unlock(listMutex);
 
  lock(listCountMutex);
  listCount++;
  unlock(listCountMutex);
} 
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.