c언어에서 volatile 키워드는 단순히 volatile 이 붙은 변수의 컴파일러 최적화를 금지하라.
이런 의미를 가지잖아?
그럼 java에서는 volatile이 어떤 효과를 가짐?
한국 블로그 글들보면 대부분이, 메인 메모리에 직접 값을 읽고 써서 뭐 캐시 동기화 문제를 상쇄시킨다라고 적혀있는데
공식문서보면 그런 말이 전혀 없더라고
stackoverflow에서는 jvm 구현체에 따라 다르다. 라는 말이 간간히 적혀있던데
c언어에서 volatile 키워드는 단순히 volatile 이 붙은 변수의 컴파일러 최적화를 금지하라.
이런 의미를 가지잖아?
그럼 java에서는 volatile이 어떤 효과를 가짐?
한국 블로그 글들보면 대부분이, 메인 메모리에 직접 값을 읽고 써서 뭐 캐시 동기화 문제를 상쇄시킨다라고 적혀있는데
공식문서보면 그런 말이 전혀 없더라고
stackoverflow에서는 jvm 구현체에 따라 다르다. 라는 말이 간간히 적혀있던데
내가 아는걸 말하자면 기본적으로 cpu 코어마다 값을 캐싱해놓고 연산하는데 멀티스레딩 환경에서는 이게 동시 요청으로 들어오면 값이 덮어씌워지는 손실 현상이 발생함. 그걸 막기 위해서 volatile 키워드를 변수에 붙이면 연산 때 캬싱된 곳이 아니라 메모리에 있는 걸 꺼내와서 씀.