멀티 쓰레드 환경에서 명령한 순서대로 실행되지 않고 멋대로 순서를 뒤바꿔어서 실행하는 경우가 생김.
메모리 베리어
2가지 용도로 사용
- 코드 재배치 억제
- 가시성
1. 코드 재배치 억제
1) Full Memory Barrier (ASM MFENCE, C# Thread.MemoryBarrier)
: Store/Load 둘 다 막는다 (store:변수에 넣는 것/load: 변수에서 끄집어 내는 것)
2) Store Memory Barrier (ASM SFENCE)
: Store만 막는다.
3) Load Memory Barrier (ASM LFENCE)
: Load만 막는다.
2. 가시성
쓰레드 마다
Thread.MemoryBarrier(); 해서 동기화 작업.
간접적으로 넣기도 함.
ex) store가 연속적으로 발생할 경우
store하고 Thread.MemoryBarrier();
store하고 Thread.MemoryBarrier(); 해주어서 가시성 확보
728x90
반응형
댓글