멀티 스레드 환경에서 원자성
이란, 공유 자원에 대한 작업의 단위를 더 이상 쪼갤 수 없이 하나의 연산인 것 처럼 동작하는 것을 의미한다.
즉, 멀티 스레드 환경에서 한 스레드가 기계 명령어를 수행하는 동안에 다른 스레드가 개입하여 같은 공유 변수에 기계 명령어를 수행할 수 있으므로 값이 꼬이게 된다. → race condition
발생!
그럼 예시를 살펴보자.
amount 값이 1씩 증가해서 40이 될 것으로 기대했지만 실제론 그렇지 않다.
amount++
작업은 사실 3개의 기계어 명령어로 동작한다.
값을 증가시킨 amount(29)을 쓰기 전에 다른 스레드가 증가전 amount(28)을 읽게되고, 두 스레드가 증가시킨 amount(29) 값이 동일하게 되는 것이다.