[ CS / OS ] Thread-safe

황승환·2022년 7월 12일
0

CS

목록 보기
49/60

Thread-safe

멀티 스레드를 활용하는 경우, 가장 조심해야 할 부분이 바로 동기화이다. 프로세스 내부에서 스택을 제외한 힙, 데이터, 코드 영역을 공유하기 때문에 내부적으로 통신은 간편하지만, 그만큼 공유자원의 충돌이 발생할 수 있기 때문에 동기화를 잘 적용해줘야 안전하게 사용할 수 있다.

멀티 스레드 환경에서 여러 스레드가 동시에 하나의 공유 자원에 접근할 때, 의도한대로 동작할 때, Thread-safe하다고 말한다.

Thread-safe하게 구현하기

Thread-safe하게 구현하기 위해서는 임계영역(critical section)을 동기화 기법으로 제어해줘야 한다. (상호 배제)

이때 동기화 기법으로는 Mutex나 Semaphore 등이 있다.

임계영역에 대해 간단히 설명하면, 여러 스레드가 공유자원에 동시에 접근하게 되는 영역이라 할 수 있다.

Reentrant (재진입성)

Reentrant는 DB 트랜잭션의 Repeatable read와 비슷한 개념이다(개인적인 생각). 여러 개의 스레드가 동시에 접근하여도 언제나 같은 실행 결과를 보장한다는 의미이다. 이를 만족하기 위해서는 해당 서브루틴에서 공유자원을 사용하지 않는 방법이 있다.

즉, Reentrant이면, Tread-safe하지만, 그 역은 성립하지 않는다.

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글