Thread-safe란 ?
- 직역하면 스레드 안전.
- 멀티스레드 환경에서 여러 스레드가 동시에 하나의 객체 및 변수(공유 자원)에 접근할 때, 의도한 대로 동작하는 것을 말한다.
- 이러한 상황을 "Thread-safe 하다"라고 표현한다.
Thread-safe하게 구현하기
- Thread-safe하기 위해서는 공유 자원에 접근하는 임계영역(critical section)을 동기화 기법으로 제어해줘야 한다.
- 이를 "상호배제"라고 한다.
- 임계영역: 공유되는 자원에서 문제가 발생하지 않도록 독점을 보장해주는 영역이다.
- 임계영역에서는 한 순간에 반드시 하나의 프로세스 또는 쓰레드만 진입이 가능하다. 공유자원 독점을 통해 동기화 유지가 가능하다.
- 동기화 기법으로는 Mutex나 Semaphore 등이 있다.
Reentrant
- Reentrant는 재진입성이라는 의미로, 어떤 함수가 Reentrant하다는 것은 여러 스레드가 동시에 접근해도 언제나 같은 실행 결과를 보장한다는 의미이다.
- 이를 만족하기 위해서 해당 서브루틴에서는 공유자원을 사용하지 않으면 된다.
- 예를 들어 정적(전역) 변수를 사용하거나 반환하면 안되고 호출 시 제공한 매개변수만으로 동작해야한다.
- 따라서, Reentrant하다면 Thread-safe하지만 그 역은 성립하지 않는다.