[OS] 스레드 세이프 (Thread Safe)

Dawon Seo·2022년 11월 27일
0

CS

목록 보기
1/1
post-thumbnail

스레드 세이프 (Thread Safe)란?

멀티 스레드 프로그래밍에서 어떤 공유 자원에 여러 스레드가 동시에 접근해도 프로그램 실행에 문제가 없는 상태

보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바르게 나오는 것

스레드 세이프를 지키기 위한 방법

1. Mutual exclusion (상호 배제)

공유 자원에 하나의 Thread만 접근할 수 있도록 뮤텍스/세마포어로 락을 통제하는 방법

2. Atomic operation (원자 연산)

공유 자원에 원자적으로 접근하는 방법입니다.

원자적인 접근?

  • 공유 자원 변경에 필요한 연산을 원자적으로 분리
  • 실제로 데이터의 변경이 이루어지는 시점에 Lock을 걸고
  • 데이터를 변경하는 시간 동안, 다른 스레드의 접근이 불가능하도록 함

atomic: 프로그래밍에서 데이터의 변경이 동시에 일어난 것처럼 보이게 하는 것을 의미

3. Thread-local storage (스레드 지역 저장소)

공유 자원의 사용을 최대한 줄이고, 각각의 스레드에서만 접근 가능한 저장소들을 사용함으로서 동시 접근을 막는 방법

  • 일반적으로 공유 상태를 피할 수 없을 때 사용

4. Re-entrancy (재진입성)

스레드 호출과 상관 없이 프로그램에 문제가 없도록 작성하는 방법

0개의 댓글