β’
λ λ€ λμμ± λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν ν€μλ
β’
λ©λͺ¨λ¦¬μμ λ³μ κ°μ μΌκ΄λκ² μ μ§νλ λ°©μ
β’
μ°λ λκ° λ©λͺ¨λ¦¬ κ°μμ± λ¬Έμ ν΄κ²°
β¦
ν μ°λ λμμ λ³κ²½ν λ³μλ₯Ό λ€λ₯Έ μ°λ λμμ μ μ ν κ°μ λ³Ό μ μλμ§
β¦
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 λ‘ ν΄κ²° κ°λ₯
β λ€λ₯Έ λμ λ°©μμ λ°λΌ λμμ± μ μ΄ μμ€κ³Ό μμμ± λ³΄μ₯ μ¬λΆμ μ°¨μ΄κ° μ‘΄μ¬νλ€.