변경 전
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 |