[Concurrency] Lock: Mutex
Mutex๋ MUtual Exclusive์ ์ถ์ฝ์ผ๋ก, ๊ฐ์ฅ ๋ํ์ ์ธ Lock ๋งค์ปค๋์ฆ ์ค ํ๋๋ค.
์๋ฆฌ๋ ๋งค์ฐ ๊ฐ๋จํ๋ค. ํ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ๊ณต์ ๋ฐ์ดํฐ์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๋ฒฝ์ ์น๋ ๊ฒ์ด๋ค.
๋ง์ฝ 2๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ์ ๊ทผ์ ์๋ํ๋ฉด, Mutex๋ ํ๋์ ์ค๋ ๋์๋ง ์ฐ์ ๊ถ์ ์ฃผ๊ณ , ๋๋จธ์ง๋ ๋๋ ๋๊น์ง ๋๊ธฐํ๋๋ก ํ๋ค.

๊ตฌํ๋ฒ
Mutex์์ atomic์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ฑํ ์ ํด์ ธ์๋๊ฑด ์๋ค. Mutex๋ ๊ทธ๋ฅ ๋ฐฉ๋ฒ๋ก ์ผ ๋ฟ์ด๋ค.
์ํฉ์ ๋ฐ๋ผ์ CAS, TAS, FAA์ ๊ฐ์ Atomic Operation์ ์ฌ์ฉํด์ ์์์ฑ์ ๊ตฌํํ ์ ์๋ค.
๊ทธ๋๋ ํ์ค์ ์ธ ๊ตฌํ ๋ฐฉ์์ ์กด์ฌํ๋ค. ๊ทธ๊ฒ ๋ฐ๋ก futex๋ค. ์์ธํ ๊ฒ์ ๋ณ๋ ํฌ์คํธ๋ฅผ ์ฐธ์กฐํ๋ค.
https://blog.naver.com/sssang97/224019441610
๊ตฌํ์ฒด๋ง๋ค ๋ค๋ฅด์ง๋ง, Mutex๋ ๋ณดํต OS์์ ์ ๊ณตํ๋ Mutex syscall์ ์์กดํ๋ค.
OS ๊ตฌํ์ ์ฅ์ ์ ๋๊ธฐ ์์ CPU๋ฅผ ๋ญ๋นํ์ง ์๊ณ ๋ค๋ฅธ ํ๋ก์ธ์ค์ yield๋ฅผ ํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ฌ์ฉ๋ฒ (Rust)
์๋๋ Rust์์ Mutex๋ฅผ ์ฌ์ฉํด์ ๋๊ธฐํ๋ฅผ ์ ์ฉํ ์๋ค.
6๊ฐ์ ์ค๋ ๋๋ฅผ ๋๋ ค์ ๊ฐ๊ฐ ๊ณต์ ๋ณ์์ 1์ ๋ํ๋๋ก ํ๋ค.

lock์ ์ ์ ํ ์ํ์์ ์ฐ์ฐ์ ํ๊ธฐ ๋๋ฌธ์, ์์ ํ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ๋ณด์ฅ์ด ๋๋ค.
๋ฐ๋๋ฝ (Dead Lock)
Mutex ๊ฐ์ lock์ ์ธ๋ ๊ณตํต์ ์ผ๋ก ์ฃผ์ํด์ผ ํ๋๊ฒ ๋ฐ๋๋ฝ์ด๋ค.
lock์ ์ ์ ํ ์ค๋ ๋๊ฐ ์ผ์ ๋๋์์๋ lock์ ๋์ง ์๋ ์ํฉ์ ๋น ์ง๋ฉด, ๊ทธ ์ด๋ค ์ค๋ ๋๋ ์ง์ ์ด ๋ถ๊ฐ๋ฅํด์ง๋ค. ์ด๊ฑธ ๋ฐ๋๋ฝ์ด๋ผ๊ณ ํ๋ค.
๊ทธ๋์ lock์ ์ก๊ณ ๋์ ์ผ์ ๋ค ๋ดค์ผ๋ฉด, ๋ฐ๋ก๋ฐ๋ก lock์ ํ์ด์ค ์ ์๋๋ก ์ ๊ฒฝ์ ์จ์ค์ผ ํ๋ค.
์ฑ๋ฅ
Mutex๋ ์๊ฐ๋ณด๋ค ๊ทธ๋ฆฌ ๋๋ฆฌ์ง ์์ง๋ง, ๊ทธ๋ ๊ฒ ๋ง ๋น ๋ฅด์ง๋ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Lock ์์
์ ํ์๋ฆฟ์ ๋๋
ธ์ธ์ปจ๋ ์์ค์์ ์ด๋ค์ง๋ operation์ด๋ค.
ํ์ง๋ง ํ๋์ ์ค๋ ๋๋ง ์ง์ ์ ํ๊ฐํ๋ค๋ ์ ์์ ์ฌ๊ฐํ ๋ณ๋ชฉ์ด ๋ ์๋ ์๋ค.
๊ทธ๋์ ์ฝ๊ธฐ ๋น์จ์ด ๋งค์ฐ ๋์ ๊ฒฝ์ฐ์๋ Read-Write Lock์ ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๊ณ ,
์ฝ๊ธฐ๋ ์ฐ๊ธฐ๋ ์ ๋ถ ๋์์ Lock์ผ๋ก ๊ฐ๋น์ด ์ด๋ ค์ด ๊ฒฝ์ฐ์๋ Lock-free ๊ธฐ๋ฒ๋ค์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
vs ์ธ๋งํฌ์ด
Mutex๋ ๊ฐ๋ ์ ์ผ๋ก๋ ์ธ๋งํฌ์ด์ ํ ์ข ๋ฅ๋ค. 0/1 ์ํ๋ง์ด ์กด์ฌํ๋ binary ์ธ๋งํฌ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๊ทผ๋ฐ ์ฌ์ค, ๊ตฌํ ๋ ๋ฒจ์์๋ ๋ฐ๋๋ก ์ธ๋งํฌ์ด๊ฐ Mutex ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋๋ ์ผ์ด ์ฆ๋ค.
https://blog.naver.com/sssang97/224004662064
๊ทธ๋์ ์ธ๋งํฌ์ด๋ฅผ ๊ตณ์ด ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์ฌ์ค ๋ง์ง ์๋ค.
๋๋ถ๋ถ์ ์์ฉํ๋ก๊ทธ๋จ์์๋ Mutex ์์ฒด๋ง์ผ๋ก๋ ์ถฉ๋ถํ๊ณ , ํจ์จ์ ์ด๋ค.
vs Lock Free
Mutex๋ ๋๋ถ๋ถ์ ์ฌ์ฉ์ฌ๋ก์์ ๊ฝค ํจ์จ์ ์ด์ง๋ง, ๋จ์ผ ์ง์ ์ write/read๊ฐ ๊ณผ๋คํ๊ฒ ๋ชฐ๋ฆฌ๊ฒ ๋๋ฉด ์ฑ๋ฅ์ด ๊ธ๊ฐํ๋ ์ง์ ์ด ์๊ธด๋ค.
๊ทธ๋ด ๋๋ Lock Free ๊ธฐ๋ฐ์ ๊ตฌํ์ ๊ณ ๋ คํด์ผ ํ๋ค.
https://blog.naver.com/sssang97/223808633111
๋ค๋ง, Lock-Free๋ ํ๋์จ์ด ์คํ. ํนํ ์ฝ์ด ์๊ฐ ์๋นํ ๋ง์ ํ๊ฒฝ์์๋ง ์ ๋์ํ๋ค๋ ์ฌ์ค์ ์์๋ฌ์ผ ํ๋ค.
์ฝ์ด ๋ช๊ฐ ๋์ง๋ ์๋ ์์ ํ๊ฒฝ์์๋ ๋๋ถ๋ถ Mutex๊ฐ ํจ์จ์ ์ด๋ค.
Lock-Free๋ผ๋ ๊ฒ์ ๊ทธ๋งํผ CPU ๋ถํ๊ฐ ์ฌํ๋ค๋ ์ด์ผ๊ธฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.