본문 바로가기

학습 기록 (Learning Logs)/김영한 자바

memory visiblity

 

변경 전

main thread

cpu core1

main thread cache memory

runFlug=true // 캐시 메모리에 있는 값을 읽기때문에 빠르게 읽을 수 있다.

 

 

work thread

cpu core2

work thread cache memory

runFlug=true

 

 

main memory

runFlug=true

 

 


변경 후

main thread

cpu core1

main thread cache memory

runFlug=false // 변경

 

 

work thread

cpu core2

work thread cache memory

runFlug=true // 따라서 이 thread는 멈추지 않는다.

 

 

main memory

runFlug=false // 변경

 

 


캐시 메모리를 main 메모리에 반영, main 메모리의 변경 내역을 캐시 메모리에 다시 불러오는 것은 언제 발생하는가?

-> 주로, context switching을 해야 cache memory가 갱신된다. 하지만 보장하지 않는다.

ex) Thread.sleep() or console.log()

 


memory visiblity

멀티 스레드 환경에서 한 스레드가 변경한 값이 -> 다른 스레드에서 언제 보이는 가?

이를 memory visiblity라고 한다. 

메모리에 변경한 값이 보이는가? 보이지 않는가?의 문제이다.

 


한 스레드에서 변경한 값이 다른 스레드에서 즉시 보이게 하려면 어떻게 해야할까?

memory visiblity

1. volatile 키워드 추가

volatile을 쓰면 캐시메모리가 아닌 바로 메인 메모리의 변경사항을 알아차린다.

 

 

 

'학습 기록 (Learning Logs) > 김영한 자바' 카테고리의 다른 글

자료구조  (0) 2024.12.05
Thread 생성 방법  (0) 2024.08.21
thread join  (0) 2024.08.21