โข
๋ ๋ค ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ํค์๋
โข
๋ฉ๋ชจ๋ฆฌ์์ ๋ณ์ ๊ฐ์ ์ผ๊ด๋๊ฒ ์ ์งํ๋ ๋ฐฉ์
โข
์ฐ๋ ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์์ฑ ๋ฌธ์ ํด๊ฒฐ
โฆ
ํ ์ฐ๋ ๋์์ ๋ณ๊ฒฝํ ๋ณ์๋ฅผ ๋ค๋ฅธ ์ฐ๋ ๋์์ ์ ์ ํ ๊ฐ์ ๋ณผ ์ ์๋์ง
โฆ
volatile ์ ์ง์ ํด๊ฒฐ, sync ๋ ๋ฉ๋ชจ๋ฆฌ ์ผ๊ด์ฑ์ ์ ๊ณตํ๋ ๋ฐฉ์
์ฐจ์ด์
โข
sync ๋ ๋ฝ์ ์ด์ฉํ์ฌ ๊ฒฝ์ ์ํ๋ฅผ ์ฐจ๋จํ๊ณ ์ธ์คํด์ค ๋ณ์, ํด๋์ค ๋ณ์, ๋ฉ์๋ ๋ฑ ๋ค์ํ ์ฝ๋ ๋ธ๋ก ๋๊ธฐํ ๊ฐ๋ฅ
โข
volatile ์ ๋จ์ง ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์์ฑ๋ง ๋ณด์ฅ โ ํ ์ฐ๋ ๋์์ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๊ทธ ๋ณ๊ฒฝ ์ฌํญ์ด ์ฆ์ ๋ค๋ฅธ ์ฐ๋ ๋์ ๋ฐ๋ก ๋ฐ์๋๋๋ก ๋ณด์ฅ, ๋ณ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
โฆ
๋ฉํฐ ์ฐ๋ ๋์์๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ ์ต์ ํํ๊ธฐ ์ํด ๋ก์ปฌ ์บ์(CPU L1, L2, L3 ์บ์)๋ฅผ ์ด์ฉํด์ ๋ณ์ ๋ณ๊ฒฝ๊ฐ์ ์ ๋๋ก ํ์ธํ ์ ์๋ ์ํฉ์ด ์๋ค.
class MyClass {
private boolean flag = false;
public void setFlagTrue() {
flag = true; // ์ฐ๊ธฐ ์ฐ์ฐ
}
public void waitForFlag() {
while (!flag) {
// flag๊ฐ true๊ฐ ๋ ๋๊น์ง ๋๊ธฐ
}
}
}
Kotlin
๋ณต์ฌ
โฆ
volatile ๋ก ์ ์ธ๋ ๋ณ์๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ์ฆ์ ๊ธฐ๋ก๋๊ณ ๋ชจ๋ ์ฐ๋ ๋๋ ํญ์ ์ต์ ๊ฐ์ ์ฝ๋๋ค. ๋ช
๋ น์ด ์ฌ๋ฐฐ์น๋ ๋ฐฉ์ดํ๋ค.
โฆ
flag ๋ฅผ volatile ๋ก ํด๊ฒฐ ๊ฐ๋ฅ
โ ๋ค๋ฅธ ๋์ ๋ฐฉ์์ ๋ฐ๋ผ ๋์์ฑ ์ ์ด ์์ค๊ณผ ์์์ฑ ๋ณด์ฅ ์ฌ๋ถ์ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค.