[Concurrency] spinlock

spinlock์€ ๋ฝ์„ ๊ฑฐ๋Š” ๋™๊ธฐํ™” ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค.




๊ตฌ์กฐ์™€ ์›๋ฆฌ

์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ๊ทธ๋ƒฅ ์ ์œ ๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€ ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ ๋Œ€๊ธฐํ•˜๊ณ , ์ ์œ ๊ฐ€ ๋๋‚˜๋ฉด ๋ฃจํ”„๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ํฌ๋ฆฌํ‹ฐ์ปฌ ์„น์…˜์— ์ง„์ž…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋บ‘๊ธ€๋บ‘๊ธ€ ๋Œ๋ฉด์„œ lock์„ ๊ฑด๋‹ค๊ณ  ํ•ด์„œ spin lock์ด๋‹ค.
mutex์™€ ๊ฐ€์žฅ ๋‹ค๋ฅธ ์ ์€, OS ๊ธฐ๋Šฅ์˜ ์˜์กด ์—†์ด ์ˆœ์ˆ˜ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌํ˜„์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

mutex๊ฐ€ os ์ˆ˜์ค€์˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด์„œ ๋ฝ ํš๋“ ์‹คํŒจ์‹œ์—” ์Šค๋ ˆ๋“œ๋ฅผ "์ ˆ์ „ ๋ชจ๋“œ"๋กœ ๋ฐ”๊พธ๊ณ  cpu ์ž์›์„ ๋†“์ง€๋งŒ, spinlock์€ ๊ณ„์† ๋ฃจํ”„๊ฐ€ ๋Œ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

https://velog.io/@soopsaram/Kernel-Mutex%EC%99%80-Spinlock-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
ํ•˜์ง€๋งŒ lock ๋Œ€๊ธฐ๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋๋‚  ์ˆ˜ ์žˆ๋Š”๊ฒŒ ๋ณด์žฅ๋˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์Šคํ•€๋ฝ์ด ๋” ์œ ํšจํ•  ์ˆ˜ ์žˆ๋‹ค.
mutex์—์„œ ์Šค๋ ˆ๋“œ๋ฅผ "์ ˆ์ „ ๋ชจ๋“œ"๋กœ ๋ฐ”๊พธ๊ณ  ๋‹ค์‹œ ๊นจ์šฐ๋Š” ๋™์ž‘์€ ์ƒ๊ฐ๋ณด๋‹ค ๋น„์‹ผ ์—ฐ์‚ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ spinlock์€ test and set์ด๋‚˜ compare and swap loop๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋˜๋Š” ๊ฒƒ์ด ๋ณดํ†ต์ด๋‹ค.
https://blog.naver.com/sssang97/223131630420

๊ทธ๋ฆฌ๊ณ  ์‚ฌ์‹ค, futex ์›๋ฆฌ์— ๊ธฐ๋ฐ˜ํ•œ Mutex ๊ตฌํ˜„์€ ์Šคํ•€๋ฝ ๊ธฐ๋Šฅ์„ ๋‚ด์žฌํ•˜๊ณ  ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ ๊ทผ๋ž˜ ๋“ค์–ด์„œ๋Š” spinlock์„ ์จ์•ผ๋งŒ ํ•˜๋Š” ๋‹น์œ„์„ฑ์ด ์ ์€ ํŽธ์ด๋‹ค.




queued spinlock

๊ฒฝ์Ÿ์ด ๋งค์šฐ ์‹ฌํ•œ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•œ ์Šคํ•€๋ฝ์˜ ๋ณ€ํ˜• ์ค‘ ํ•˜๋‚˜๋‹ค. ๊ฒฝ์Ÿ์ด ์‹ฌํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ผ๋ฐ˜ ์Šคํ•€๋ฝ์ด ๋” ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด ์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๋ฝ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

๋‹จ์ˆœํ•œ ์Šคํ•€๋ฝ์˜ ๊ตฌํ˜„์—๋Š” ๊ฝค ํฐ ๋‹จ์ ์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์šฐ์„ ์ˆœ์œ„์˜ ๋ถ€์—ฌ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ C ์Šค๋ ˆ๋“œ์—์„œ lock์„ ๋“ค๊ณ ์žˆ๋Š” ์ƒํƒœ์—์„œ A ์Šค๋ ˆ๋“œ๊ฐ€ ๋จผ์ € lock์„ ์‹œ๋„ํ•˜๊ณ  B ์Šค๋ ˆ๋“œ๊ฐ€ 5๋ถ„ ๋’ค์— lock์„ ์‹œ๋„ํ•˜๋”๋ผ๋„, B ์Šค๋ ˆ๋“œ๊ฐ€ ๋จผ์ € lock์„ ์–ป๋Š” ๋ถˆ๊ณตํ‰ํ•œ ์ƒํ™ฉ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.

queued spinlock์€ ํ๋ฅผ ๋„์ž…ํ•จ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

๋ฐฉ๋ฒ•๋ก ์€ ๋‹จ์ˆœํ•˜๋‹ค.
lock์„ ์‹œ๋„ํ–ˆ์„๋•Œ, ์–ป์„ ์ˆ˜ ์—†์œผ๋ฉด queue์— ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋“ฑ๋กํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  lock์ด ํ’€๋ ธ์„๋•Œ ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์Šค๋ ˆ๋“œ์—๊ฒŒ lock์„ ๋ถ€์—ฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฟ์ด๋‹ค.


์ฐธ์กฐ
https://stackoverflow.com/questions/5869825/when-should-one-use-a-spinlock-instead-of-mutex
https://junsoolee.gitbook.io/linux-insides-ko/summary/syncprim/linux-sync-2
https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/queued-spin-locks