πΒ Reference
πΒ Chapter
β£
Mutex, Semaphore, Critical Section
Race condition - JavaScript
Race condition
- Race condition
- λ°μ΄ν° κ²½μ
- κ²½μ μν
- λ κ° μ΄μμ νλ‘μΈμ€κ° κ³΅ν΅ μμμ λ³νμ μΌλ‘(concurrently) μ½κ±°λ μ°λ λμμ ν λ, κ³΅μ© λ°μ΄ν°μ λν μ κ·Όμ΄ μ΄λ€ μμμ λ°λΌ μ΄λ£¨μ΄μ‘λμ§μ λ°λΌ κ·Έ μ€ν κ²°κ³Όκ° κ°μ§ μκ³ λ¬λΌμ§λ μν©μ λ§νλ€.
- Raceμ λ» κ·Έλλ‘, κ°λ¨ν λ§νλ©΄ κ²½μνλ μν, μ¦ λ κ°μ μ€λ λκ° νλμ μμμ λκ³ μλ‘ μ¬μ©νλ €κ³ κ²½μνλ μν©μ λ§νλ€.
- κ²½μ μν(race condition)λ μ¬λ¬ κ°μ νλ‘μΈμ€λ μ€λ λκ° νλμ 곡μ μμμ λμμ μ κ·Όνλ €κ³ ν λ, μ κ·Όνλ μμμ λ°λΌ μ€ν κ²°κ³Όκ° λ¬λΌμ§λ μν©μ λ§νλ€.
- λ§μΉ μ¬λ¬ λͺ
μ μ£Όμκ° κ²°μΉμ μ ν₯ν΄ λ¬λ¦¬λ κ²½μ£Όμ λΉμ·νλ€κ³ ν΄μ 'κ²½μ' μνλΌλ μ΄λ¦μ΄ λΆμλ€.
μ리
-
κ²½μ μνλ μ£Όλ‘ λ€μκ³Ό κ°μ κ²½μ°μ λ°μνλ€.
- 곡μ μμ: μ¬λ¬ νλ‘μΈμ€λ μ€λ λκ° λμμ μ½κ±°λ μΈ μ μλ λ³μ, νμΌ, λ°μ΄ν°λ² μ΄μ€ λ±μ 곡μ μμμ΄ μμ λ.
- λμ μ κ·Ό: λ κ° μ΄μμ νλ‘μΈμ€λ μ€λ λκ° μ΄ κ³΅μ μμμ λμμ μ κ·Όνλ €κ³ ν λ.
- λΉλκΈ°μ μ€ν: κ° νλ‘μΈμ€λ μ€λ λκ° λ
립μ μΌλ‘ μ€νλλ©°, μ νν μ΄λ€ μμλ‘ κ³΅μ μμμ μ κ·Όν μ§ μμΈ‘ν μ μμ λ.
-
μλ₯Ό λ€μ΄, λ μ€λ λ(Thread A, Thread B)κ° μν κ³μ’μ μμ‘(balance)μ 100μ© μ¦κ°μν€λ μμ
μ νλ€κ³ κ°μ ν΄ λ³΄κ² λ€.
- νμ¬ μμ‘μ 500μ
λλ€.
- Thread Aκ° μμ‘μ μ½μ΅λλ€ (balance = 500).
- Thread Bκ° μμ‘μ μ½μ΅λλ€ (balance = 500).
- Thread Aκ° 100μ λνκ³ κ²°κ³Όλ₯Ό μλλ€ (balance = 600).
- Thread Bκ° 100μ λνκ³ κ²°κ³Όλ₯Ό μλλ€ (balance = 600).
-
λ μ€λ λκ° κ°κ° 100μ© λνμΌλ―λ‘ μ΅μ’
μμ‘μ 700μ΄ λμ΄μΌ νμ§λ§, κ²°κ³Όλ 600μ΄ λλ€.
-
μ΄λ Thread Bκ° μμ‘μ μ½μ μμ μ Thread Aμ κ³μ°μ΄ λλκΈ° μ μ΄μκΈ° λλ¬Έμ΄λ€.