[Concurrency] Fetch And Add (FAA)
Fetch And Addλ Compare And Swapκ³Ό λΉμ·ν μΈμ€νΈλμ
μμ€μ lock-freeν atomic μ°μ° κΈ°λ²μ΄λ€.
κ·Έλ₯λ μ¬μ©ν μ μκ³ , μ€νλ½ λ±μ ꡬννλλ° μ¬μ©ν μλ μλ€.
맀컀λμ¦μ C μ½λλ‘ λνλ΄λ©΄ μ΄λ κ² λλ€.
int fetch_and_add(int* object, int add) {
int old = *object;
*object += add;
return old;
}
κ°μ λνκ³ , λνκΈ° μ΄μ μ κ°μ λ°ννλ€.
Compare And Swapμ΄ λΉκ΅-ν μμ νλ κ²μΌλ‘ μ€ν¨ κ°λ₯ν μ°μ°μ΄μλ€λ©΄, Fetch And Addλ μ°μ λνκ³ λ³΄λ μ’ λ¬΄μν λμμ κ°μ§λ€.
μν©μ λ§κ² μ μ¬μ©νλ©΄ λλ€.
μ΄μ λΈλ¦¬μμ
x86μ κ²½μ°, lockκ³Ό xadd κ°μ λͺ
λ Ήμ μ‘°ν©νλ κ²μΌλ‘ FAA μ°μ°μ ꡬνν μ μλ€.
μ΄λ° ννλ€.

κ³ κΈ μΈμ΄μμ (Rust)
Rustμ κ²½μ°, Atomic νμ μ κΈ°λ³Έ μ°μ° ν¨μλ‘μ μ κ³΅μ΄ λλ€.
λ§μ
λ§κ³ λ νμμ μΈ μ°μ° ν¨μλ€μ λ€ λ€μ΄μλ€.
μλ μ½λλ FAAλ₯Ό μ΄μ©ν΄μ 6κ°μ μ€λ λμμ κ°κ° 100000λ² 1λ§νΌ μ¦κ°μν€λ νλ‘κ·Έλ¨μ΄λ€.

μ λλ€.