배 타다 개발자

[메모리 배리어] 코드 재배치와 가시성을 확보 할 수 있다. 본문

Backend/Research

[메모리 배리어] 코드 재배치와 가시성을 확보 할 수 있다.

노 아 2021. 12. 31. 10:56

메모리 배리어(Memory Barrier)

이 코드를 읽고 실행해보자.

싱글쓰레드에서는 절대로 마지막 반복문을 빠져나올 수 없다.

하지만 생각보다 반복문을 잘 빠져나오는 것을 알 수 있다.


이는, 멀티쓰레드에서는 하드웨어 최적화가 적용되기 때문이다.

즉, 하드웨어가 쓰레드(Thread_1,Thread_2)에 준 연산들이 서로 상관이 없는 연산이라고 생각하면 의 연산 순서를 임의로 바꾸어서 연산하는 경우도 있기 때문이다.

이 때 메모리 배리어(Memory Barrier)를 사용한다.


메모리 배리어를 사용한 를 실행해보면 반복문을 빠져나오지 못한다.

 

메모리 베리어를 통해 코드 재배치가시성을 확보 할 수 있다.

메모리 배리어의 가시성
멀티쓰레드 환경에서 한 쓰레드의 연산상황을 중앙 메모리에 업로드해서 다른 쓰레드도 지금 다른그 쓰레드의 변경된 값들을 반영할 수 있다. 이를 가시성이라 표현함