LabHub

운영체제 · 동시성과 락 · 퀴즈

퀴즈: 동시성과 락

LabHub 에서 이어서 보기

문항 7개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.

  1. counter = counter + 1 이 경쟁 상태를 일으키는 이유는?

    1. 읽기, 더하기, 쓰기의 세 단계 사이에 다른 스레드가 끼어들 수 있기 때문
    2. 컴파일러가 최적화로 순서를 바꾸기 때문
    3. 정수 오버플로가 발생하기 때문
    4. 캐시 일관성 프로토콜이 없기 때문
  2. 뮤텍스 대신 세마포어를 쓰는 것이 자연스러운 상황은?

    1. 임계 구역을 한 스레드만 들어가게 하고 싶을 때
    2. 재귀 호출 안에서 같은 락을 다시 잡아야 할 때
    3. 동시 접속 수를 5개로 제한하는 커넥션 풀을 만들 때
    4. 락을 잡은 스레드만 풀 수 있게 강제하고 싶을 때
  3. 조건 변수를 기다린 뒤 깨어났을 때 조건을 다시 검사해야 하는 이유는?

    1. 조건 변수는 값을 저장하지 않아 매번 다시 읽어야 하기 때문
    2. 대기 중에 뮤텍스가 자동으로 해제되어 상태가 무효해지기 때문
    3. 가짜 깨어남이 있을 수 있고, 깨어난 사이 다른 스레드가 조건을 바꿨을 수 있기 때문
    4. 조건 변수의 신호는 큐에 쌓였다가 나중에 다시 전달되기 때문
  4. 데드락의 네 가지 필요 조건에 해당하지 않는 것은?

    1. 상호 배제 — 자원을 한 번에 하나만 쓸 수 있다
    2. 점유하며 대기 — 가진 채로 다른 자원을 기다린다
    3. 순환 대기 — 대기 관계가 고리를 이룬다
    4. 기아 — 특정 스레드가 계속 밀려 진행하지 못한다
  5. 여러 코드 경로에서 데드락이 자주 발생할 때 가장 현실적인 예방책은?

    1. 락을 아예 쓰지 않는다
    2. 모든 코드가 락을 동일한 순서로 획득하도록 규칙을 정한다
    3. 타임아웃을 무한대로 늘린다
    4. 스레드 수를 늘린다
  6. 스핀락이 블로킹 락보다 유리한 조건은?

    1. 코어가 하나뿐일 때
    2. 임계 구역이 매우 짧고 대기 시간이 컨텍스트 스위치 비용보다 작을 때
    3. 임계 구역 안에서 디스크 I/O 를 할 때
    4. 대기 스레드가 아주 많을 때
  7. '재고를 확인하고 남아 있으면 차감'하는 로직에서 격리 수준을 반복 읽기로 올렸는데도 초과 판매가 계속된다. 가장 정확한 진단은?

    1. 두 트랜잭션이 같은 집합을 읽고 서로 다른 행을 갱신하는 쓰기 편향이라 스냅샷 격리로는 잡히지 않는다
    2. 설정이 반영되지 않아 실제로는 커밋된 읽기로 동작하고 있다
    3. 인덱스가 없어서 잠금 범위가 좁아졌기 때문이다
    4. 커넥션 풀이 작아 트랜잭션이 뒤엉켜 순서가 꼬였기 때문이다