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๋Š” ๋ณ€์ˆ˜์˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์—ฐ์‚ฐ๋งŒ ์›์žํ™” ์‹œํ‚ฌ ๋ฟ, ๋™๊ธฐํ™” ์‹œํ‚ค๋Š” ๊ฐœ๋…์€ ์•„๋‹ˆ๋‹ค.

์œ„ ํ•œ ์ค„์˜ ์ฝ”๋“œ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์„ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค.

  1. ๊ฐ’ ์กฐํšŒ(Read)

  2. ์—ฐ์‚ฐ ์ˆ˜ํ–‰(Modify)

  3. ๊ฒฐ๊ณผ ์ €์žฅ(Write)

volatile์„ ์ ์šฉํ•˜๋”๋ผ๋„ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— balance -= amount๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด, ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ผํ•œ ๊ฐ’์„ ์ฝ์–ด๊ฐ„ ํ›„ ๊ฐ์ž ์—ฐ์‚ฐํ•˜๊ณ  ๋ฎ์–ด์“ฐ๋ฏ€๋กœ ๊ฒฝ์Ÿ ์กฐ๊ฑด(Race Condition)์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋™๊ธฐํ™”(synchronization) ๋ณด์žฅ

์›์ž์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” synchronized ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ, ํ•ด๋‹น ์ฝ”๋“œ ์˜์—ญ์„ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์‹คํ–‰ํ•˜๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

  • volatile : ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ์›์ž์ ์œผ๋กœ ์ฒ˜๋ฆฌ

  • synchronized : ํ•ด๋‹น ๋ธ”๋ก์— ๊ฐ์‹ธ์ง„ ์ฝ”๋“œ๋ฅผ ์›์ž์ ์œผ๋กœ ์ฒ˜๋ฆฌ

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?