Notice
Recent Posts
Recent Comments
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก์ „์ฒด ๊ธ€ (1099)

KoreanFoodie's Study

C++ ๊ธฐ์ดˆ ๊ฐœ๋… 15-3 : atomic ๊ฐ์ฒด์™€ memory order

๋ชจ๋‘์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ๊ฐ„์ถ”๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์˜ ์”น์–ด๋จน๋Š” C++ ๊ฐ•์ขŒ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! ํŒŒ์ดํ”„๋ผ์ด๋‹ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. int a = 0; int b = a + 1; a = 1; ์ง๊ด€์ ์œผ๋กœ๋Š” b = a + 1 ์ด a = 1 ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•œ ๊ฒƒ์„ ๋ณด๋ฉด a = 1 ์ด ๋” ๋จผ์ € ์‹คํ–‰๋˜๊ธฐ๋„ ํ•œ๋‹ค. ๋ฌผ๋ก  b ์™€ a ์—๋Š” ๊ฐ๊ฐ 1์ด๋ผ๋Š” ๊ฐ’์ด ์ œ๋Œ€๋กœ ๋“ค์–ด๊ฐ€์ง€๋งŒ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ž‘์—…์˜ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ์ฝ”๋“œ์˜ ์‹คํ–‰์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ด๋ฅผ ํŒŒ์ดํ”„๋ผ์ด๋‹์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด๋Š” ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์–ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค. ์ˆ˜์ • ์ˆœ์„œ(Modification Order) ๋ช…๋ น์–ด๋ฅผ ๋’ค์ฃฝ๋ฐ•์ฃฝ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š”๋ฐ๋„ ์–ด๋–ป๊ฒŒ ์ œ๋Œ€๋กœ..

Tutorials/C++ : Beginner 2022. 4. 19. 10:23
C++ ๊ธฐ์ดˆ ๊ฐœ๋… 15-1 : ์“ฐ๋ ˆ๋“œ(thread)์˜ ๊ธฐ์ดˆ์™€ ์‹ค์Šต

๋ชจ๋‘์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ๊ฐ„์ถ”๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์˜ ์”น์–ด๋จน๋Š” C++ ๊ฐ•์ขŒ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ CPU ์ฝ”์–ด์—์„œ ๋Œ์•„๊ฐ€๋Š” ํ”„๋กœ๊ทธ๋žจ ๋‹จ์œ„๋ฅผ ์“ฐ๋ ˆ๋“œ(Thread) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ฆ‰, CPU ์˜ ์ฝ”์–ด ํ•˜๋‚˜์—์„œ๋Š” ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์˜ ๋ช…๋ น์„ ์‹คํ–‰์‹œํ‚ค๊ฒŒ ๋œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๋กœ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ, ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ์˜ ์ฐจ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋Š๋ƒ ํ•˜์ง€ ์•Š๋Š๋ƒ์˜ ์ฐจ์ด์ด๋‹ค. ๊ฐ ์ฝ”์–ด์—์„œ๋Š” ์ฝ”์–ด๊ฐ€ ๋Œ์•„๊ฐ€๋Š”๋ฐ, ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ (Context Switching) ์„ ํ†ตํ•ด ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์‹คํ–‰๋œ๋‹ค. ๋ณ‘๋ ฌํ™”(Parallelizable) ๊ฐ€๋Šฅํ•œ ์ž‘์—… ์“ฐ๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•ด ๋ณ‘๋ ฌํ™”๋ฅผ ์ ์šฉํ•˜๋ฉด ๋”์šฑ ๋น ๋ฅธ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š”..

Tutorials/C++ : Beginner 2022. 4. 19. 10:23
C++ ๊ธฐ์ดˆ ๊ฐœ๋… 13-2 : shared_ptr ์™€ weak_ptr

๋ชจ๋‘์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ๊ฐ„์ถ”๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์˜ ์”น์–ด๋จน๋Š” C++ ๊ฐ•์ขŒ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! shared_ptr ์–ด๋–ค ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ, ์—ฌ๋Ÿฌ ํฌ์ธํ„ฐ์—์„œ ์ฐธ์กฐ๋ฅผ ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ, ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํฌ์ธํ„ฐ์˜ ์ˆ˜๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋กœ๋ถ€ํ„ฐ ํ•ด์ œํ•ด์ฃผ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ shared_ptr์ด๋‹ค. std::shared_ptr p1(new A()); std::shared_ptr p2(p1); // unique_ptr ์ผ ๊ฒฝ์šฐ ์†Œ์œ ๊ถŒ ๋ฌธ์ œ๋กœ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. std::unique_ptr p3(new A()); std::shared_ptr p4(p3); // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ, shared_ptr ๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๊ณ ..

Tutorials/C++ : Beginner 2022. 4. 19. 10:23
C++ ๊ธฐ์ดˆ ๊ฐœ๋… 13-1 : RAII ํŒจํ„ด๊ณผ unique_ptr

๋ชจ๋‘์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ต์‹ฌ ๋‚ด์šฉ์„ ๊ฐ„์ถ”๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ชจ๋‘์˜ ์ฝ”๋“œ์˜ ์”น์–ด๋จน๋Š” C++ ๊ฐ•์ขŒ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”! Resource Acquisition Is Initialization - RAII ์ž์›์˜ ํš๋“์€ ์ดˆ๊ธฐํ™”๋‹ค. ์ด๋Š” ์ž์› ๊ด€๋ฆฌ๋ฅผ ์Šคํƒ์— ํ• ๋‹นํ•œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋”๋ผ๋„, ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์Šคํƒ์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋“ค์€ ๋น ์ง์—†์ด ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค(stack unwinding). ๋งŒ์•ฝ ์ด ์†Œ๋ฉธ์ž๋“ค ์•ˆ์— ๋‹ค ์‚ฌ์šฉํ•œ ์ž์›์„ ํ•ด์ œํ•˜๋Š” ๋ฃจํ‹ด์„ ๋„ฃ์œผ๋ฉด ์–ด๋–จ๊นŒ? A* pa = new A(); ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ํฌ์ธํ„ฐ pa์˜ ๊ฒฝ์šฐ, ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์†Œ๋ฉธ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ ๋Œ€์‹ , pa๋ฅผ ์ผ๋ฐ˜์ ์ธ ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹Œ, ํฌ์ธํ„ฐ..

Tutorials/C++ : Beginner 2022. 4. 19. 10:23