본문 바로가기

자바의 정석

[자바의 정석 2권] volatile

 

1) Volatile

- 요즘엔 대부분 멀티 코어 프로세서가 장착된 컴퓨터를 사용한다.

  그리고 멀티 코어 프로세서에서는 코어마다 별도의 캐시를 가지고 있다. 

 

- 코어는 메모리에서 읽어 온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업한다.

  다시 같은 값을 읽어올 때는 먼저 캐시에 있는지 확인하고 없을 때만 메모리에서 읽어온다. 

 

- 그러다보니 도중에 메모리에 저장된 변수의 갑싱 변경되었는데도 캐시에 저장된 값이 갱신되지 않아서

  메모리에 저장된 값이 다른 경우가 발생한다.

boolean suspended = false;       ----->   volatile boolean suspended = false;
boolean stopped = false;         ----->   volatile boolean stopped = false;

 

  이 때, 변수 앞에 volatile을 붙이면, 코어가 변수의 값을 읽어올 때 

  캐시가 아닌 메모리에서 읽어오기 때문에 캐시와 메모리간의 값의 불일치가 해결된다.