Volatile
CPU์ ๊ฐ ์ฝ์ด๋ ์ฑ๋ฅ ํฅ์์ ์ํด ์บ์(Cache)๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ค๋ ๋๊ฐ ํน์ ๋ณ์๋ฅผ ์ฝ์ ๋, ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์์ ์ ์บ์์ ์ ์ฅ
์ดํ ํด๋น ์บ์์์ ๊ฐ ์กฐํ
ํ ์ค๋ ๋์์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ณ๊ฒฝํ๋๋ผ๋, ๋ค๋ฅธ ์ค๋ ๋๋ ์์ ์ ์บ์์ ์ ์ฅ๋ ์ด์ ๊ฐ์ ๊ณ์ ์ฝ์ด์ฌ ์ ์์
์ด์ฒ๋ผ ์ค๋ ๋ ๊ฐ์ ๋ณ์์ ๊ฐ์ด ์ผ์นํ์ง ์๋ ๊ฐ์์ฑ(Visibility) ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
volatile boolean v = false;๋ณ์์ volatile์ ์ ์ธํ๋ฉด, ํด๋น ๋ณ์๋ฅผ ์ฝ๊ณ ์ธ ๋ CPU ์บ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํญ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ์ ๊ทผํ๋๋ก ๊ฐ์ ํ๋ค.
์ฐ๊ธฐ(write): ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์
์ฝ๊ธฐ(read): ์์ ์ ์บ์๋ฅผ ๋ฌดํจํํ๊ณ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์์ ์ต์ ๊ฐ ์กฐํ
์์์ฑ
volatile์ ๊ฐ์์ฑ ๋ณด์ฅ ์ธ์, ํน์ ์ฐ์ฐ์ ์์์ฑ(Atomicity)์ ๋ณด์ฅํ๋ ์ญํ ์ ํ ์ ์๋ค.
์๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ(JMM)์
int,byte,short,char๋ฑ 32๋นํธ ์ดํ ํ์ ์ ๋จ์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฐ์ฐ์ ์์์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ๋ณด์ฅ64๋นํธ ํ์ ์ธ
long๊ณผdouble์ JMM ๋ช ์ธ์,long๊ฐ์ ์ฐ๊ธฐ(write)๋ ๋ ๊ฐ์ 32๋นํธ ์ฐ๊ธฐ ์์ ์ผ๋ก ๋๋์ด ์ํ
64๋นํธ ๋ณ์์ volatile์ ์ ์ธํ๋ฉด, long๊ณผ double ํ์
์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฐ์ฐ์ด ๋ถ๋ฆฌ๋์ง ์๊ณ ์์์ ์ผ๋ก ์ฒ๋ฆฌ๋จ์ ๋ณด์ฅํ๋ค.
volatile ํ๊ณ์ ๋๊ธฐํ
volatile๋ ๋ณ์์ ์ฝ๊ธฐ/์ฐ๊ธฐ ์ฐ์ฐ๋ง ์์ํ ์ํฌ ๋ฟ, ๋๊ธฐํ ์ํค๋ ๊ฐ๋
์ ์๋๋ค.
์ ํ ์ค์ ์ฝ๋๋ ๋ด๋ถ์ ์ผ๋ก ์ธ ๋จ๊ณ๋ก ๋๋๋ค.
๊ฐ ์กฐํ(Read)
์ฐ์ฐ ์ํ(Modify)
๊ฒฐ๊ณผ ์ ์ฅ(Write)
volatile์ ์ ์ฉํ๋๋ผ๋ ๋ ์ค๋ ๋๊ฐ ๋์์ balance -= amount๋ฅผ ์ํํ๋ฉด, ๋ ์ค๋ ๋๊ฐ ๋์ผํ ๊ฐ์ ์ฝ์ด๊ฐ ํ ๊ฐ์ ์ฐ์ฐํ๊ณ ๋ฎ์ด์ฐ๋ฏ๋ก ๊ฒฝ์ ์กฐ๊ฑด(Race Condition)์ด ๋ฐ์ํ๋ค.
๋๊ธฐํ(synchronization) ๋ณด์ฅ
์์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด์๋ synchronized ๋ธ๋ก์ ์ฌ์ฉํ์ฌ, ํด๋น ์ฝ๋ ์์ญ์ ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์คํํ๋๋ก ํด์ผ ํ๋ค.
volatile: ํด๋น ๋ณ์์ ๋ํ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ์์์ ์ผ๋ก ์ฒ๋ฆฌsynchronized: ํด๋น ๋ธ๋ก์ ๊ฐ์ธ์ง ์ฝ๋๋ฅผ ์์์ ์ผ๋ก ์ฒ๋ฆฌ
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?