๋ชฉ์ฐจ
- ๋ฌธ์ ์ ์
- lock free ๊ตฌํ
- ABA ํด๊ฒฐ
- intํ ๊ตฌํ(+ Hazard pointer)
- Counter
- ๊ทธ ์ธ์ ๋ฐฉ๋ฒ๋ค
- mutex lock(spin lock)๊ณผ์ ๋น๊ต
๊ทธ ์ธ์ ๋ฐฉ๋ฒ๋ค
-
DCAS
-
_InterlockedCompareExchange128 ์ฌ์ฉ
์์ Counter ๊ธฐ๋ฒ๊ณผ ๋น์ทํ๋ค. 64bit๋ฅผ ๋ชจ๋ ์ด์ฉํ์ฌ ์ฃผ์๋ฅผ ํํํ๋ CPU์์๋ ์์ Counter ๊ธฐ๋ฒ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก c++์ _InterlockedCompareExchange128 ์ฐ์ฐ์ ์ด์ฉํ์ฌ ์ด๋ฅผ ๋์ ํ ์ ์๋ค. ์ด ์ฐ์ฐ์ 64bit ์๋ฃํ 2๊ฐ๋ฅผ ๋ฌถ์ด์ 128bit๋ก CAS ์ฐ์ฐ์ ์ํํ ์ ์๋ค. ์ด ๋ 64bit ์ฉ ๋ถ๋ฆฌํ์ฌ ์๋ก์ด ๊ฐ์ผ๋ก ๋ฐ๊พธ์ด์ค ์ ์๋ค.
-
lock ๋ณ์ ์ด์ฉ
์ด์ ๋ธ๋ฆฌ์ด๊น์ง ๋ณด๋ฉด lock-free ๊ธฐ๋ฒ๋ ๊ฒฐ๊ตญ lock์ ์ด์ฉํ์ง๋ง, ์ฝ๋ ์์์ ๊ตฌํํ๊ธฐ ์ํด lock ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ lock๊ธฐ๋ฒ๊ณผ ๋ค๋ฅผ ๊ฒ์ด ์์ผ๋ฏ๋ก ์ฌ๋ฐ๋ฅธ ํด๊ฒฐ์ฑ ์ด ์๋๋ค.
-
-
RCU
๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ (read) ๋ณต์ฌํด์(copy) ์ฌ์ฉํ๋ค(use). ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ original data๋ฅผ ์ฌ์ฉํ๊ณ ์์ ๋์ ๊ธฐ๋ค๋ฆฌ๋ค๊ฐ original data๋ฅผ ์ฌ์ฉํ๋ ์ฐ๋ ๋๊ฐ ์์ผ๋ฉด ๋ณต์ฌํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฉ์ํจ๋ค.
-
FreeList
FreeList 2๊ฐ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๊ฐ push์ pop์ ํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
=> ์๋ฌด ์ค๋ ๋๋ ๋์ํ์ง ์์ ๋, ๋ List๋ฅผ ํฉํด์ค์ผํ๋ค.
-
LL, SC
LL, CC ๋ช ๋ น์ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ํด๋น ์๋ฃํ์ ๊ฑด๋๋ ธ๋์ง ์ ๊ฑด๋๋ ธ๋์ง๋ฅผ ๊ฐ์ง๊ณ ์ฐ์ฐ์ ์ฑ๊ณต / ์คํจ๋ฅผ ๋ฐ์ง๋ฏ๋ก ํด๊ฒฐ ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ์ด ๋ช ๋ น์ arm cpu์์ ์ฃผ๋ก ๊ฐ๋ฅํ๋ฉฐ arm cpu๋ฅผ ์ฐ๋ PC๋ ๋ง์ง ์๋ค.
์ ์ฉ ๊ฐ๋ฅํ ์ํคํ ์ฒ
- ARM
- 68k
- Alpha
- ARM (ARMv6 ~ ARMv8)
- MIPS
- POWERPC
=> mutex์์ ๋น๊ต๋ ๋ง์ง๋ง ํฌ์คํ ์
Comment