[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 ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•˜๋‹ค๋Š” ์ด์•ผ๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.



์ฐธ์กฐ
https://megayuchi.com/2017/06/25/srwlock-%EB%B9%A0%EB%A5%B8-%EC%84%B1%EB%8A%A5%EC%9D%98-%EB%B9%84%EA%B2%B0/