🟣

OS: 스레드 안전(Thread-Safety)

작성일자
Mar 14, 2023
태그
CS
프로젝트
책 종류
  • 정의)
    • 멀티스레드 환경에서 여러 스레드가 동시에 하나의 자원(함수, 변수, 객체)에 접근해도 프로그램의 실행에 문제가 없는 것(의도한 대로 동작하는 것)
    • 멀티스레드 환경에서 여러 스레드가 동시에 데이터를 읽거나 쓰는 등의 작업을 할 때, 데이터의 일관성과 정확성을 보장하는 것
    • 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바르게 나오는 것
  • 구현)
    • 스레드 안전을 보장하기 위해선 스레드 간의 동기화가 필요함
    • 더 정확히는, 공유 자원에 접근하는 임계영역(critical section)을 동기화 기법으로 제어해줘야 함 → 이를 ‘상호배제’라고 함
      • 임계구역 : 공유메모리에 접근하는 프로그램의 코드 부분
  • 상호배제 구현 방법)
    • lock-based
      • 정의)
        • lock을 이용해 동기화 구현
        • 공유 자원에 하나의 Thread만 접근할 수 있도록 세마포어 / 뮤텍스로 락을 통제하는 방법
      • 예시)
        • Mutex(뮤텍스)
        • Semaphore(세마포어)
    • lock-free
      • 정의)
        • lock을 사용하지 않고 동기화 구현
        • 공유 자원에 접근할 때는 원자 연산을 이용하거나 원자적으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현
      • 예시)
        • Atomic operation(원자 연산)
 
  • 레퍼런스