스레드 안전

스레드 안전( 安全, )은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다.

스레드 안전인지 아닌지 알아내기 
보통 어떤 프로그램이 스레드 안전인지 아닌지 알아내는 것은 간단하지 않지만 다음을 참고할 수 있다.
 전역 변수나 힙, 파일과 같이 여러 스레드가 동시에 접근 가능한 자원을 사용하는지 여부
 핸들과 포인터를 통한 데이터의 간접 접근 여부
 부수 효과를 가져오는 코드가 있는지 여부

구현 방법 
 재진입성: 어떤 함수가 한 스레드에 의해 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바로 주어져야 한다.
 상호 배제: 공유 자원을 꼭 사용해야 할 경우 해당 자원의 접근을 세마포어 등의 락으로 통제한다.
 스레드 지역 저장소: 공유 자원의 사용을 최대한 줄여 각각의 스레드에서만 접근 가능한 저장소들을 사용함으로써 동시 접근을 막는다.
 원자 연산: 공유 자원에 접근할 때 원자 연산을 이용하거나 '원자적'으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현할 수 있다.

같이 보기 
 스레드
 예외 처리
 멀티프로그래밍
 경쟁 조건
 원자성

스레드
프로그래밍 언어 주제