volatile

κΈ°λ³Έμ μΈ λ©ν° νλ‘μΈμ€μ ꡬ쑰.
Core(CPU) λ³λ‘, μΊμλ€μ κ°μ§κ³ μκ³ , L3 λ₯Ό κ±°μ³ RAMμΌλ‘ κ°λ ꡬ쑰.
λ§μ½μ L1 cacheμμ A λ©λͺ¨λ¦¬μ κ°μ μ λ°μ΄νΈκ° μΌμ΄λλ©΄ μ΄λ»κ² λ κΉ?
κ·Έ μ λ°μ΄νΈκ° RAMμ μ νλ λ κΉμ§λ λ€λ₯Έ μ½μ΄μμλ μ μ μμ. (μ λ°μ΄νΈκ° μλμμΌλ)
data inconsistency
μ΄ ν€μλλ₯Ό μ¬μ©νλ©΄, ν΄λΉ λ³μμ λ³νκ° main memoryκΉμ§ λ°λ‘ μ νλ¨μ μλ―Έ. ([[compare-and-swap]] λΌλ λ°©λ²μ μ΄μ©ν΄μ)
Memory Visibility
public class TaskRunner {
private static int number;
private static boolean ready;
private static class Reader extends Thread {
@Override
public void run() {
while (!ready) {
Thread.yield();
}
System.out.println(number);
}
}
public static void main(String[] args) {
new Reader().start();
number = 42;
ready = true;
}
}
μ€λ λλ 2κ° main, runner thread
main threadμμ μ λ°μ΄νΈ ν λ³μ (number, ready) κ° runner thread μκ²λ λ°λ‘ μ½μ μ μμκΉ?
κ·Έλ΄ μλ, μκ°μ΄ 걸릴 μλ, νΉμ μ λ°μ΄νΈκ° μλ μλ μμ.
μ?
processors tend to queue those writes in a special write buffer
λ°λ‘ μ μ©λλ κ²μ΄ μλ, write bufferμ queue λ₯Ό λμ Έμ, μΌμ μκ°μ΄ μ§λ νμ main memoryμ λ°μλκΈ° λλ¬Έ
μ¦ μ 리νμλ©΄,
main threadκ° number, ready λ³μλ₯Ό μ λ°μ΄νΈ νμ λ, reader threadκ° μ λ°μ΄νΈ λ λ³μλ₯Ό μ½λ λ€λ 보μ₯μ΄ μμ.
μ¬μ§μ΄ programe order (number -> ready) μμΌλ‘ μ λ°μ΄νΈν΄μ 보기 보λ€λ μμ λ€λ₯Έ μμ (ready -> number) μμΌλ‘λ λ³Ό μ μμ. (κ°λ°μμ μλμλ μμ λ€λ₯΄κ²..)
ready = trueλ‘ λ°λμμ§λ§ numberλ μ λ°μ΄νΈ λμ§ μμ μ± 0μ νλ¦°νΈ νκ³ μ’ λ£λ μλ μλ€λ λ»μΈλ―.
To ensure programm order
To ensure that updates to variables propagate predictably to other thread
νλ‘κ·Έλ¨μ μμ±ν μμλλ‘ λ³μλ€μ΄ μ λ°μ΄νΈ λλ κ²μ 보μ₯νκΈ° μν΄μ ?
volatile
λ³μλ₯Ό μ¬μ©.
public class TaskRunner {
private volatile static int number;
private volatile static boolean ready;
// same as before
}
μ΄λ κ² νλ©΄.. number μ λ°μ΄νΈ νμ readyκ° μ λ°μ΄νΈ λλ€.
42 print ν μ’ λ£λ₯Ό μμΈ‘ν μ μμλ―.
For multithreaded applications
μΌκ΄μ μΈ νλμ μν΄μ 2κ°μ§ λ£°μ μ§μΌμΌν¨.
Mutual Exclusion : μΉλͺ μ μΈ λΆλΆμλ νλ²μ νλμ μ€λ λλ§ μ€ννλλ‘.
Visibility : 곡μ λ μμμ νλμ μ€λ λλ‘ λΆν° λ§λ€μ΄μ§ λ³νλ€μ, λ€λ₯Έ μ€λ λλ€μ΄ λ³Ό μ μμ΄μΌν¨. μ? data consistency λ₯Ό μ μ§νκΈ° μν΄
[[sy]] λ©μλλ 1,2 λ²μ λ£°μ λͺ¨λ λ§μ‘± μν¬ μ μμ.
λ€λ§ μλΉν μμμ μλͺ¨.
κ·Έλ μ§λ§ [[volatile]] λ mutual exclusion μμ΄ 2λ² visibility μΈ‘λ©΄μ λ§μ‘±μν΄.
μ°Έκ³
Last updated
Was this helpful?