![](https://velog.velcdn.com/images/gemnsh/post/6c086e6e-4e39-4468-ac9e-88f981c7272a/image.png)
정의
멀티 스레드 프로그래밍에서 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 의미함
Thread-safe를 위한 규칙
- Mutual exclusion (상호 배제)
- 공유자원에 하나의 Thread 만 접근할 수 있도록, 세마포어/ 뮤텍스로 락을 통제
- Atomic operation (원자 연산)
- 공유자원 변경에 관련된 연산을 원자적으로 분해한 뒤 데이터 변경이 일어나는 지점에 락을 걸어 통제
- Thread-local storage (쓰레드 지역 저장소)
- 공유 자원의 사용을 최대한 줄이고, 각각의 쓰레드에서만 접근 가능한 저장소들을 사용
- Re-entrancy (재진입성)
- 쓰레드 호출과 상관 없이 프로그램에 문제가 없도록 작성하는 방법
세마포어와 뮤텍스
공유 불가능한 자원의 동시 사용을 피하기 위해 사용됨
- 세마포어
- 현재 공유자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내는 값을 두어 상호배제(뮤텍스)를 달성함
- 뮤텍스
- Key 에 해당하는 어떤 오브젝트가 있으며 이 오브젝트를 소유한 (쓰레드,프로세스) 만이 공유자원에 접근 가능함