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

๋ชฉ์ฐจ ๋ฌธ์ œ ์ •์˜ 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-fr..

[c++] BOJ 1461๋ฒˆ :: ๋„์„œ๊ด€
Algorithm ๋ฌธ์ œ/BOJ 2020. 4. 23. 23:45

๋„์„œ๊ด€ https://www.acmicpc.net/problem/1461 ๋ฌธ์ œ ์„ธ์ค€์ด๋Š” ๋„์„œ๊ด€์—์„œ ์ผํ•œ๋‹ค. ๋„์„œ๊ด€์˜ ๊ฐœ๋ฐฉ์‹œ๊ฐ„์ด ๋๋‚˜์„œ ์„ธ์ค€์ด๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งˆ๊ตฌ ๋†“์€ ์ฑ…์„ ๋‹ค์‹œ ๊ฐ€์ ธ๋‹ค ๋†“์•„์•ผ ํ•œ๋‹ค. ์„ธ์ค€์ด๋Š” ํ˜„์žฌ 0์— ์žˆ๊ณ , ์‚ฌ๋žŒ๋“ค์ด ๋งˆ๊ตฌ ๋†“์€ ์ฑ…๋„ ์ „๋ถ€ 0์— ์žˆ๋‹ค. ๊ฐ ์ฑ…๋“ค์˜ ์›๋ž˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ฑ…์„ ๋ชจ๋‘ ์ œ์ž๋ฆฌ์— ๋†”๋‘˜ ๋•Œ ๋“œ๋Š” ์ตœ์†Œ ๊ฑธ์Œ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์„ธ์ค€์ด๋Š” ํ•œ ๊ฑธ์Œ์— ์ขŒํ‘œ 1์นธ์”ฉ ๊ฐ€๋ฉฐ, ์ฑ…์˜ ์›๋ž˜ ์œ„์น˜๋Š” ์ •์ˆ˜ ์ขŒํ‘œ์ด๋‹ค. ์ฑ…์„ ๋ชจ๋‘ ์ œ์ž๋ฆฌ์— ๋†”๋‘” ํ›„์—๋Š” ๋‹ค์‹œ 0์œผ๋กœ ๋Œ์•„์˜ฌ ํ•„์š”๋Š” ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ธ์ค€์ด๋Š” ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ M๊ถŒ์˜ ์ฑ…์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ์ฑ…์˜ ๊ฐœ์ˆ˜ N๊ณผ, ์„ธ์ค€์ด๊ฐ€ ํ•œ ๋ฒˆ์— ๋“ค ์ˆ˜ ์žˆ๋Š” ์ฑ…์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ฑ…์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N์€ ..

[c++] ๋ฐฐ์—ด ๋ฐ (STL) vector ์ดˆ๊ธฐํ™” ๋ฐฉ๋ฒ• ์ •๋ฆฌ
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Algorithm 2020. 4. 13. 20:33

์ปจํ…Œ์ด๋„ˆ์— ๊ธฐ๋ณธ๊ฐ’ ์ฑ„์šฐ๊ธฐ ๋ฐฐ์—ด 1์ฐจ์› ๋ฐฐ์—ด ๊ธฐ์กด ์ฝ”๋“œ #include using namespace std; int main() { int arr[3]; for (int i = 0; i < 3; i++) { cout

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ณผ์ œ 5. 2์˜ ํ™€์ˆ˜์ œ๊ณฑ์ˆ˜ - 1์€ ์†Œ์ˆ˜์ผ๊นŒ?
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Algorithm 2020. 3. 28. 10:56

์†Œ์ˆ˜ ์ฐพ๊ธฐ ํ”„๋กœ๊ทธ๋žจ ๋ฐฉ๋ฒ• n-1๊นŒ์ง€ ๊ตฌํ•˜๊ธฐ O(n) n-1 ๊นŒ์ง€ ์†Œ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ตฌํ•˜๋Š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์งœ๊ธฐ ์†Œ์ˆ˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ์†Œ์ˆ˜ ๋ฐฐ์—ด๋งŒ ๋Œ๋ฉด์„œ ๋‚˜๋ˆ„์–ด์ง€๋Š”์ง€ ํŒ๋‹จ O(n) ์†Œ์ˆ˜ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ๋ฐ์— O(n) => ๋ฉ”๋ฆฌํŠธ ์—†์Œ ๋ฃจํŠธ n๊นŒ์ง€ ๋Œ๋ฆฌ๋ฉด์„œ ์ง์ˆ˜ ์ œ์™ธํ•˜๊ธฐ O(sqrt(n)) ์กฐ๊ฑด ์ถ”๊ฐ€ ๋ช‡ ๊ฐœ์˜ ์†Œ์ˆ˜( 3, 5 )๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ์ˆ˜์˜ ๋ฐฐ์ˆ˜์ด๋ฉด ๋›ฐ์–ด๋„˜๊ธฐ 3, 5 ๊ณ„์‚ฐ ์‹œ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š์•˜์œผ๋ฉด ํ•ด๋‹น ์ˆ˜์˜ ๋ฐฐ์ˆ˜์—๋„ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€์ง€ ์•Š์Œ ๊ตฌํ˜„ ์‹œ ์ฃผ์˜ ํ•ด๋‹น ์ˆ˜๊ฐ€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š”์ง€, 5๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋Š”์ง€๋ฅผ ๊ณ„์‚ฐํ•˜๋ ค๋ฉด ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ ๋ณ€์ˆ˜ ํ•˜๋‚˜์”ฉ ์ง€์ •ํ•˜๊ณ  1์”ฉ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌ์„ฑ 3๊ณผ 5์˜ ๊ณต๋ฐฐ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฉด ๋จผ์ € ๊ฑฐ์น˜๋Š” 3์˜ if๋ฌธ์—์„œ continue ๋จ์œผ๋กœ ..