14_atomic 정리

14_atomic 정리

날짜
생성자
ShalomShalom
카테고리
pararell
작성일
2023년 05월 15일
태그
c++
이전 블로그

원자성(Atomic)

CPU는 우리가 짠대로 번역하지 않는다.

notion image
a = b + 1을 실행 시키고 b = 1을 실행 시키는 것이 아니라 CPU 파이프라이닝에 맞게 코드를 어셈블리화 시킨다!

CPU 파이프라이닝

notion image
위 처럼 기계가 3대(세탁기, 건조기, 사람 손)가 있는데, 순차적으로 돌리는 것은 효율적이지 않다.
notion image
  • fetch: 명령어를 가져온다.
  • decode: 명령어를 해석 및 레지스터 파일을 찾는다.
  • excute: 실행 또는 주소를 계산한다.
  • write back: 연산을 타겟 레지스터에 저장한다.
// 현재 a = 0, b = 0; a = 1; // 캐시에 없음 b = 1; // 캐시에 있음
a 가 캐시에 없으므로 Ram에서 내용을 가져오기에 시간이 오래 걸리므로 b = 1을 먼저 수행할 수 있다.
<aside> 💡 a가 캐시에 없으므로 a를 메모리에서 가져오는 동안 b =1을 수행한다. 따라서 다른 스레드에서는 a가 0인데, b가 1인 순간을 관찰이 가능하다.
</aside>

원자성

변수 또는 객체 하나가 실시간으로 변화하는 순서를 기록한 것을 수정 순서라한다.
notion image
어떤 스레드가 a 를 읽었다면 다음 스레드는 a 를 8, 6, 3 중 하나의 상태로 볼 수 있다. 5로는 못본다는 것이다.
모든 스레드들이 이러한 순서에 동의를 하는 경우 원자적이라고 한다.

원자성

즉, 원자적 연산이란 CPU가 명령어 1개로 처리하는 명령으로, 다른 쓰레드가 끼어들 여지가 없는 상태이다. → 동기화 영역이 필요하지 않게 되고 속도가 빨라지게 된다.

댓글

guest