[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๊ณต๋ถ€ :: ์ž๋ฃŒ๊ตฌ์กฐ - ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Algorithm 2020. 7. 19. 11:09

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋ฆฌ์ŠคํŠธ๋ž€? ์ •์˜ ๋ฐฐ์—ด๊ณผ์˜ ๋น„๊ต ์—ฐ์‚ฐ ์‚ฝ์ž… ์‚ญ์ œ ์ ‘๊ทผ ์ข…๋ฅ˜ / ๊ตฌํ˜„ ๋ฆฌ์ŠคํŠธ๋ž€? ๋ฆฌ์ŠคํŠธ๋Š” ์ˆœ์„œ๋ฅผ ๊ฐ€์ง„ ํ•ญ๋ชฉ๋“ค์˜ ๋ชจ์ž„์ด๋‹ค. ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ๋ฐฐ์—ด์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ณ  ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฐฐ์—ด์„ ์ด์šฉํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ ํ˜•๋ฆฌ์ŠคํŠธ๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๊ตฌํ˜„ ์ž์ฒด๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ์ž„์˜์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์‚ฝ์ž… / ์‚ญ์ œ ์—ฐ์‚ฐ ์‹œ ๋‹ค๋ฅธ ์š”์†Œ๋“ค์˜ ์ด๋™์ด ๋ถˆ๊ฐ€ํ”ผํ•˜๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๋‹ค. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” ๊ตฌํ˜„์ด ๋ณต์žกํ•˜๊ณ  ์ˆœ์ฐจ์ ‘๊ทผ์ด ํ•„์š”ํ•˜์ง€๋งŒ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ํšจ์œจ์ ์ด๋‹ค. ์ •์˜ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ž€ ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ฐ์ดํ„ฐ์™€ ๋งํฌ๋กœ ์ด๋ฃจ์–ด์ง„ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. ๋งํฌ๋Š” ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ด๋‹ค. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์ฒ˜์Œ์—๋Š” ํ—ค๋“œ ํฌ์ธํ„ฐ๊ฐ€ ํ—ค๋“œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ ๋งํฌ๋Š” ..

[c++] CAS ๊ตฌํ˜„ ๋ฐ ABA ๋ฌธ์ œ ํ•ด๊ฒฐ :: ๋ฌธ์ œ ์ •์˜, ๊ธฐ๋ณธ CAS ๊ตฌํ˜„
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Operating System 2020. 7. 2. 19:27

๋ชฉ์ฐจ ๋ฌธ์ œ ์ •์˜ lock free ๊ตฌํ˜„ ABA ํ•ด๊ฒฐ intํ˜• ๊ตฌํ˜„(+ Hazard pointer) Counter ๊ทธ ์™ธ์˜ ๋ฐฉ๋ฒ•๋“ค mutex lock(spin lock)๊ณผ์˜ ๋น„๊ต ๋ฌธ์ œ ์ •์˜ ๋ฌธ์ œ Linked List ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ push()์™€ pop() ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•œ๋‹ค. Linked List๋Š” FreeList์™€ HeadList ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋ฉฐ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‘ ๊ฐœ์˜ List๋ฅผ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ push, pop ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์Šค๋ ˆ๋“œ๋“ค์ด ๊ฐ๊ฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” List๋“ค์— ๋Œ€ํ•œ ์ƒํ˜ธ๋ฐฐ์ œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ•ด์„ ์ƒํ˜ธ ๋ฐฐ์ œ์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ, ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. lock ๋ณ€์ˆ˜์˜ ์กฐ๊ฑด์„ ์ฒดํฌํ•˜๋ฉฐ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๊ณ  ์žˆ๋Š” spin lock๊ณผ, lock ๋ณ€์ˆ˜ ์—†์ด ๊ณ„์† ์‹œ๋„ํ•˜๋ฉด์„œ ์ ์ ˆํ•œ ๋•Œ์— ๋™์ž‘์„ ์ˆ˜ํ–‰..