책너두 (컴퓨터 밑바닥의 비밀) 6일차 스레드 안전 코드

요약

  • 공유 리소스를 사용할 때는 반드시 그에 상응하는 제약이 필요함.

    • 특정 스레드가 다른 스레드의 공유 리소스 사용 순서를 방해하지 않는 한 스레드 안전을 달성할 수 있음.
      • 전용 리소스를 사용하는 스레드는 스레드 안전을 달성할 수 있음.
      • 공유 리소스를 사용하는 스레드는 다른 스레드에 영향을 주지 않도록 하는 대기 제약 조건에 맞게 공유 리소스를 사용하면 스레드 안전을 달성할 수 있음.
  • 스레드 안전이란?

    • 어떤 코드가 스레드 몇 개에서 호출되든, 스레드들이 어떤 순서로 호출되든 상관없이 올바른 결과가 나오는 것.
  • 스레드 전용 리소스와 공유 리소스

    • 스레드 전용 리소스 : 함수의 지역 변수, 스레드의 스택 영역, 스레드 전용 저장소
    • 그외의 것이 공유 리소스임.
      • 힙 영역, 데이터 영역, 코드 영역
  • 공유 리소스를 사용하는 스레드는 반드시 순서를 따라야 함.

    • 공유 리소스를 사용하는 작업이 다른 스레드를 방해할 수 없음.
      • 각종 잠금이나 세마포어같은 장치를 사용할 수 있음. → 공유 리소스 순서를 유지하기 위함.
  • 스레드 안전 코드 구현 방법

    • 스레드 전용 저장소
      • 각 스레드마다 자체 복사본이 있기에 이를 변경하더라도 다른 스레드에 영향을 미치지 않음.
    • 읽기 전용
      • 전역 리소스를 반드시 사용해야 한다면 해당 전역 리소스를 읽기 전용으로 사용할 수 있는지 확인함.
    • 원자성 연산
      • 원자성 연산은 도중에 중단되지 않음. → 잠금으로 보호가 필요하지 않기 때문
    • 동기화 시 상호 배제
      • 프로그래머가 공유 자원의 스레드 접근 순서를 유지해야함.
      • 뮤텍스, 스핀 잠금, 세마포어 등을 이용해야 함.

댓글

Designed by JB FACTORY