CAS
νΉμ λ©λͺ¨λ¦¬ μμΉμ κ°μ λΉκ΅νκ³ , μμνλ κ°μ΄ μΌμΉνλ©΄ μλ‘μ΄ κ°μΌλ‘ κ΅μ²΄νλ μ°μ°μ΄λ€.
μΈμλ‘ κΈ°μ‘΄ κ°, μλ‘μ΄ κ°μ μ λ¬
κΈ°μ‘΄ κ°μ΄ νμ¬ λ©λͺ¨λ¦¬μ κ°κ³Ό κ°λ€λ©΄ μλ‘μ΄ κ°μΌλ‘ κ΅μ²΄
κ΅μ²΄ μ±κ³΅ μ¬λΆλ₯Ό λ°ν
λΉκ΅ + κ΅μ²΄ λ κ°μ μ°μ°μΌλ‘ 보μ΄μ§λ§, μ΄λ νλμ¨μ΄ μμ€μμ μ²λ¦¬ν μ μμ΄ μμμ μΌλ‘ λμνλ©°, λμμ μ¬λ¬ μ€λ λκ° λμμ CAS μ°μ°μ μνν΄λ λ¬Έμ κ° λ°μνμ§ μλλ€.
Javaμμμ CAS
java.util.concurrent.atomic
ν¨ν€μ§μμ μ 곡νλ Atomic
ν΄λμ€λ€μ CAS μ°μ°μ μ§μνλ€.
CAS μ°μ°μ Atomic ν΄λμ€μ λ©μλλ‘ κ΅¬νλμ΄ μμΌλ©°, κ° νμ
μ λμνλ ν΄λμ€κ° μ 곡λλ€.(AtomicInteger, AtomicLong, AtomicBoolean λ±)
Atomicκ³Ό volatile
Atomic ν΄λμ€λ λ΄λΆμ μΌλ‘ volatile
ν€μλλ₯Ό μ¬μ©νμ¬ λ©€λ² λ³μλ₯Ό μ μΈνλ€.
volatile ν€μλλ λ©λͺ¨λ¦¬ κ°μμ±μ 보μ₯νκΈ° μν΄ μ¬μ©λλλ°, μ΄λ CAS μ°μ°μ΄ μ¬λ°λ₯΄κ² λμνκΈ° μν νμ 쑰건μ΄λ€.
volatile ν€μλλ₯Ό μ¬μ©νλ©΄, λ³μμ κ°μ μ½μ λ CPU μΊμκ° μλ λ©μΈ λ©λͺ¨λ¦¬μμ μ½μ΄μ€κ² λ¨
λ©ν°μ€λ λ νκ²½μμ λͺ¨λ μ€λ λκ° νμ μ΅μ κ°μ μ½μ μ μλλ‘ λ³΄μ₯
CAS μ°μ°μ λΉκ΅μ κ΅μ²΄λ₯Ό νλ λμ λ©λͺ¨λ¦¬ κ°μ΄ μ νν΄μΌ νλ―λ‘, λ©λͺ¨λ¦¬ κ°μμ±μ΄ 보μ₯λμ΄μΌ ν¨
vs λ½ κΈ°λ° λκΈ°ν
μ¬λ¬ μ€λ λκ° λμμ νλμ μμμ μ κ·Όν λ, λ½ κΈ°λ° λκΈ°νμ CAS λ°©μ λ κ°μ§ λ°©λ²μ μ¬μ©ν μ μλ€.
CAS λ°©μ: κ°λ¨ν μ°μ°κ³Ό μΆ©λμ΄ μ μ νκ²½μ μ ν© / μΆ©λ λ°μ μ μ¬μλλ‘ μΈν΄ μ±λ₯ μ ν κ°λ₯
λ½ κΈ°λ°: 볡μ‘ν λκΈ°ν λ‘μ§μ΄λ μΆ©λμ΄ λΉλ²ν νκ²½μ μ ν© / λ½ νλ κ³Όμ μμ κ²½ν©κ³Ό λκΈ° λ°μ κ°λ₯
μ κ·Ό λ°©μ
λΉκ΄μ (pessimistic)
λκ΄μ (optimistic)
λμ μ리
λ½ νλ ν λ°μ΄ν° μ κ·Ό
κ° λΉκ΅ ν 쑰건 λ§μ‘± μ κ΅μ²΄
볡μ‘ν λκΈ°ν μ²λ¦¬
μ ν©
λΆμ ν©
μΆ©λ μ μ²λ¦¬
λκΈ°
μ¬μλ
Last updated
Was this helpful?