더북(TheBook)

이처럼 한 줄짜리 코드에서도 스레드 2개가 접근하면 예상 밖의 결과가 나온다. 1.2.7 프로세스 동기화에서 이야기한 너무 많은 우유 문제도 스레드 안전하다고 할 수 없다.

 

깊게 알기 | 스레드 안전을 위한 조건

스레드 안전하기 위해서는 다음과 같은 조건을 지켜야 한다.

상호배제(mutual exclusive): 공유 자원에 접근해야 할 때 뮤텍스 또는 세마포어와 같은 상호배제 기법을 사용해 접근을 통제해야 한다.

원자 연산(atomic operation): 공유 자원에 접근할 때 원자 연산을 이용하거나 원자적으로 정의된 연산을 이용해 연산 도중에 다른 스레드가 접근할 수 없게 한다. 여기서 원자 연산이란 ‘연산했다’와 ‘연산 안 했다’ 두 가지만 존재하는 연산이다.

재진입성(reentrancy): 특정 함수를 하나의 스레드에서 실행 중일 때 다른 스레드가 해당 함수를 실행해도 각 스레드에 올바른 결과가 나올 수 있게 해야 한다.

스레드 지역 저장소(thread local storage): 각 스레드에서만 접근할 수 있는 저장소를 사용해서 공유되는 자원을 줄여야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.