๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€110

std::thread์™€ std::async โœ… ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ vs ๊ณผ์ œ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ work๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” std::thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ทธ ๊ฐ์ฒด์—์„œ work๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์ด๋Š” ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜(thread-based) ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋˜ ํ•˜๋‚˜๋Š” work๋ฅผ std::async์— ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด๊ณ  ์ด๋Š” ๊ณผ์ œ ๊ธฐ๋ฐ˜(task-based) ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. int work(); std::thread t(work); auto f = std::async(work); ์œ„ ์ฝ”๋“œ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๋ณด์•˜์„ ๋•Œ, async๋ฅผ ์“ฐ๋ฉด work์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์ž…๋‹ˆ๋‹ค.(std::get์„ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)(thread๋Š” ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.) ์ด๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ .. 2023. 1. 14.
[std] iterator๋ณด๋‹จ const_iterator ! ๊ฐ€๋Šฅํ•œ ํ•œ ํ•ญ์ƒ const๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๋Š” ํ‘œ์ค€ ๊ด€ํ–‰์€ ๋ฐ˜๋ณต์ž์—๊ฒŒ๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์ž๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ๋Š” ํ•ญ์ƒ const_iterator๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. std::vector data; auto itr = std::find(data.cbegin(), data.cend(), 5);// cbegin, cend์‚ฌ์šฉ if (itr == data.cend()) data.push_back(5); 2023. 1. 14.
๊ฐ์ฒด ์ƒ์„ฑ์‹œ ์†Œ๊ด„ํ˜ธ์™€ ์ค‘๊ด„ํ˜ธ ์ฐจ์ด C++ 11์€ ๊ท ์ผ ์ดˆ๊ธฐํ™”(uniform initialization)๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ท ์ผ ์ดˆ๊ธฐํ™” ๊ตฌ๋ฌธ์€ ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด์ „์—๋Š” ํ‘œํ˜„ํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๋ฐฉ์‹์˜ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. class Foo { ... private: int x{0};// OK int y = 0; // OK int z(0);// Error! }; ๋ฐ˜๋ฉด ๋ณต์‚ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด(์˜ˆ๋ฅผ ๋“ค๋ฉด std::atomic)์€ ์ค‘๊ด„ํ˜ธ๋‚˜ ์†Œ๊ด„ํ˜ธ๋กœ๋Š” ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ =๋กœ๋Š” ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. std::atomic val1{0};//OK std::atomic val2(0);//OK std::atomic val3 = 0;//Error! ๋˜, ์ค‘๊ด„ํ˜ธ ์ดˆ๊ธฐํ™”์˜ ํ˜์‹ ์ ์ธ ๊ธฐ๋Šฅ์€ ๋ฐ”๋ฅด์ง€ ์•Š์€ ์•”๋ฌต์  ํ˜•๋ณ€ํ™˜์„ ๋ฐฉ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. double .. 2023. 1. 14.
[C++]ํฌ์ธํ„ฐ์™€ ๋ ˆํผ๋Ÿฐ์Šค ์ฐจ์ด C++์—์„œ ํฌ์ธํ„ฐ์™€ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋ชจ๋‘ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฑฐ๋‚˜ ์ฐธ์กฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๊ทธ๋“ค ๊ฐ„์— ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์˜ - ํฌ์ธํ„ฐ(Pointer): ํฌ์ธํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฐ„์ ‘ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๋Š” '*' ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉฐ, ํ• ๋‹น๋œ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - ๋ ˆํผ๋Ÿฐ์Šค(Reference): ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๊ธฐ์กด ๋ณ€์ˆ˜์˜ ๋ณ„์นญ(alias)์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐ์กด ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋ณ„์นญ์„ ๋งŒ๋“ค์–ด ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆํผ๋Ÿฐ์Šค๋Š” '&' ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ๋˜๋ฉฐ, ํ•œ ๋ฒˆ ํ• ๋‹น๋˜๋ฉด ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐํ™” - ํฌ์ธํ„ฐ(Pointer): ํฌ์ธํ„ฐ๋Š” ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋„ ํฌ์ธํ„ฐ๋กœ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... 2023. 1. 9.
์ปดํ“จํ„ฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ธฐ์ˆ  ๋ฉ”์ธ๋ณด๋“œ ๋‚ด ๋ฉ”๋ชจ๋ฆฌ์™€ ์ฃผ๋ณ€์žฅ์น˜๋Š” ์‹œ์Šคํ…œ๋ฒ„์Šค(FSB)๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , CPU ๋‚ด ALU, ์ œ์–ด์žฅ์น˜, ๋ ˆ์ง€์Šคํ„ฐ๋Š” CPU ๋‚ด๋ถ€ ๋ฒ„์Šค(BSB)๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์†๋„๋Š” ์‹œ์Šคํ…œ ๋ฒ„์Šค์˜ ์†๋„์™€ ๊ฐ™๊ณ , CPU์˜ ์†๋„๋Š” CPU ๋‚ด๋ถ€ ๋ฒ„์Šค์˜ ์†๋„์™€ ๊ฐ™๋‹ค. CPU ๋‚ด๋ถ€ ๋ฒ„์Šค์˜ ์†๋„๊ฐ€ ์‹œ์Šคํ…œ ๋ฒ„์Šค์˜ ์†๋„ ๋ณด๋‹ค ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„๋กฏํ•œ ์ฃผ๋ณ€์žฅ์น˜์˜ ์†๋„๊ฐ€ CPU์˜ ์†๋„๋ฅผ ๋”ฐ๋ผ๊ฐ€์ง€ ๋ชปํ•œ๋‹ค. ์„ฑ๋Šฅ ํ–ฅ์ƒ ๊ธฐ์ˆ ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ž‘์—… ์†๋„๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ๊ธฐ์ˆ  ์ค‘ ์šด์˜์ฒด์ œ์™€ ๊ด€๋ จ๋œ ๊ธฐ์ˆ ์„ ์‚ดํŽด๋ณด์ž. ๋ฒ„ํผ ๋ฒ„ํผ๋Š” ์†๋„์— ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๋‘ ์žฅ์น˜ ์‚ฌ์ด์—์„œ ๊ทธ ์ฐจ์ด๋ฅผ ์™„ํ™”ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋ณด๊ด€ ์ฐฝ๊ณ ์—์„œ ๊ทค 5๊ฐœ๋ฅผ ๋„๋งˆ๋กœ ์˜ฎ๊ธธ ๋•Œ ํ•˜๋‚˜์”ฉ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฐ”๊ตฌ๋‹ˆ๋กœ 5๊ฐœ๋ฅผ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ๋ฒ„ํผ์— ํ•ด๋‹นํ•œ๋‹ค. ์ผ.. 2023. 1. 7.
๊ต์ฐฉ์ƒํƒœ(DeadLock) ์•„์‚ฌ ํ˜„์ƒ์€ ์šด์˜์ฒด์ œ๊ฐ€ ์ž˜๋ชป๋œ ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํ”„๋กœ์„ธ์Šค์˜ ์ž‘์—…์ด ์ง€์—ฐ๋˜๋Š” ๋ฌธ์ œ. ๊ต์ฐฉ ์ƒํƒœ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ์–‘๋ณดํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ. ๊ต์ฐฉ ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ•์••์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค. ๊ต์ฐฉ ์ƒํƒœ์˜ ๋ฐœ์ƒ ๊ต์ฐฉ ์ƒํƒœ๋Š” ์‹œ์Šคํ…œ ์ž์›, ๊ณต์œ  ๋ณ€์ˆ˜(๋˜๋Š” ํŒŒ์ผ), ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. ์‹œ์Šคํ…œ ์ž์› ์˜ˆ๋ฅผ ๋“ค๋ฉด, ํ”„๋กœ์„ธ์Šค P1์€ ํ”„๋ฆฐํ„ฐ๋ฅผ ํ• ๋‹น ๋ฐ›์€ ํ›„ CD ๋ ˆ์ฝ”๋”๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ํ”„๋กœ์„ธ์Šค P2๋Š” CD ๋ ˆ์ฝ”๋”๋ฅผ ํ• ๋‹น ๋ฐ›์€ ํ›„ ํ”„๋ฆฐํ„ฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ์—ฌ๊ธฐ์„œ ํ”„๋ฆฐํ„ฐ์™€ CD ๋ ˆ์ฝ”๋“œ ๊ฐ™์€ ์ž์›์€ ์ž„๊ณ„๊ตฌ์—ญ์œผ๋กœ ๋ณดํ˜ธ๋ฐ›๊ณ  ์žˆ์Œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋Š” ์ž์›์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒ(๋Œ€ํ‘œ์ ) ๊ณต์œ  ๋ณ€์ˆ˜ ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ ๊ณต์œ  ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด์„œ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋„๋Š” ๊ฒฝ์šฐ ํ•œ .. 2023. 1. 3.