간단하고 쉽게/JAVA
[JAVA] - 동기화와 원자적 연산이란?(차이점) 간단하고 쉽게 이해하기
꼼코더
2023. 4. 4. 11:08
반응형
나는 문득 이런 생각이 들었다
"동기화는 '충돌방지' 원자적 연산도 '충돌방지' 그럼 동기화 == 원자적 연산 같은 말 아니야?"
그래서 나름 찾아보고 글을 적어본다!
♻️ 동기화
멀티스레드 환경에서 여러 스레드가 공유하는 데이터를 안전하게 접근하고 조작하기 위해 사용하는 기술.
동기화는 공유 데이터에 접근하는 스레드들이 서로 충돌하지 않도록 해주는 역할을 한다.
⚛️ 원자적 연산
한번에 실행되거나 실행되지 않는 연산을 의미.
원자적 연산은 연산이 실행되는 도중에 다른 스레드에 의해 방해받지 않는 것이 보장되어야 하며
실행결과도 항상 일관성이 있어야 한다.
👀차이점
동기화와 원자적 연산은 비슷한 개념이지만, 같은 의미는 아니다.
예를 들어, "i++" 연산은 하나의 단위 연산이 아니므로( 현재 i의 값을 읽어온다 > i에 1을 더한다)
여러 스레드가 "i++"를 동시에 실행하면 결과가 일관성 없이 나올 수 있다.
따라서, "i++"와 같은 연산이 원자적으로 실행되도록 보장하기 위해 AtomicInteger와 같은 원자적 자료형을 사용한다.
🎬 마무리
동기화와 원자적 연산은 서로 비슷한 개념이지만, 차이점이 존재한다
- 동기화 : 여러 스레드 간의 공유 데이터 접근을 보호하기 위해 사용.
- 원자적 연산 : 하나의 연산이 원자적으로 실행되도록 보장하기 위해 사용.