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

C++ ๊ธฐ์ดˆ28

[C++] 22. ์Šค๋ ˆ๋“œ ํ’€(Thread Pool), ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ํŒจํ„ด(Producer-consumer) ์ง€๋‚œ ์‹œ๊ฐ„์—์„œ๋Š” ์Šค๋ ˆ๋“œ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ ๊ณผ ์Šค๋ ˆ๋“œ์˜ ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. [C++] 21. ์Šค๋ ˆ๋“œ ๊ฒฝ์Ÿ ์ƒํƒœ(Race condition), ๋ฎคํ…์Šค(mutex), ๋ฐ๋“œ๋ฝ, std::conditional_variable, std::async ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์Šค๋ ˆ๋“œ ํŒจํ‚ค์ง€์˜ ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ„, ์Šค๋ ˆ๋“œ ํ’€์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์‹œ์ฃ ! ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ํŒจํ„ด(Producer-Consumer) Producer-Consumer ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ๋””์ž์ธ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜๋กœ, ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ์ž‘์—…์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์กฐ์ ˆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ๋‹ค์ˆ˜์˜ ์ƒ์‚ฐ์ž(Producer)์™€ ์†Œ๋น„์ž(Consumer) ๊ฐ„์˜ ํ˜‘๋ ฅ์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ƒ์‚ฐ์ž ์†Œ๋น„์ž ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ์˜ ์ง„์ž…(income).. 2023. 9. 4.
[C++] 21. ์Šค๋ ˆ๋“œ ๊ฒฝ์Ÿ ์ƒํƒœ(Race condition), ๋ฎคํ…์Šค(mutex), ๋ฐ๋“œ๋ฝ, std::conditional_variable, std::async ์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์™€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค, std::thread์— ๋Œ€ํ•ด ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. [C++] 20. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Multi-Threads) ์˜ค๋Š˜์€ ์ด์–ด์„œ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ์˜ ์ถฉ๋Œ ๋ฌธ์ œ์™€ lock ๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ณ , ์Šค๋ ˆ๋“œ๋“ค(workers)์ด wait์ƒํƒœ์—์„œ ๋Œ€๊ธฐํ•˜๋‹ค๊ฐ€ ์ž‘์—…์ด ์žˆ์„ ๋•Œ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋งˆํŠธํ•œ ์šด์˜๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ ์ž์›(Shared Resources)๊ณผ ์ž„๊ณ„์˜์—ญ(Critical Section) ์Šค๋ ˆ๋“œ(Thread)๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์ž‘์€ ์‹คํ–‰ ๋‹จ์œ„๋กœ, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์Šค๋ ˆ๋“œ ๊ฐ„์—๋Š” ๊ณต์œ ์ž์›(Shared Resource)๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณต์œ ์ž์›์„ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ž„๊ณ„์˜.. 2023. 8. 22.
[C++] 20. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Multi-Threads) ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ(Multi-Threads) ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹คํ–‰ ํ๋ฆ„์ธ ์Šค๋ ˆ๋“œ(thread)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ "๋ถ€๋ถ„ ์ž‘์—…"์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜์—ฌ ์ „์ฒด ์ž‘์—…์„ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ์š” ๊ฐœ๋…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: 1. ์Šค๋ ˆ๋“œ (Thread): ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ, ๋™์‹œ์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. ๋ณ‘๋ ฌ์„ฑ (Concurrency): ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜์ง€๋งŒ, ์‹ค์ œ๋กœ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ํ”„๋กœ์„ธ์„œ์˜ ๋ฌผ๋ฆฌ์  ํ•œ๊ณ„ ๋•Œ๋ฌธ์— ์ œํ•œ๋  ์ˆ˜ .. 2023. 8. 18.
[C++] 19. ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ(Operator Overloading) ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ(Operator Overloading) ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์€ ์‚ฌ์šฉ์ž ์ •์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•ด ๊ธฐ์กด์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์ƒˆ๋กœ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์—ฐ์‚ฐ์ž(+, -, /, *, ++, --, =, ==, , = ๋“ฑ)๋ฅผ ๋‚ด๋งˆ์Œ๋Œ€๋กœ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•ด ์‚ฐ์ˆ  ์—ฐ์‚ฐ, ๋น„๊ต ์—ฐ์‚ฐ ๋“ฑ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์€ C++์˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ์ ์ธ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋กœ, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž ์˜ค๋ฒ„๋กœ๋”ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. return_type operator ์—ฐ์‚ฐ์ž(๋งค๊ฐœ๋ณ€์ˆ˜) { // ์—ฐ์‚ฐ์ž๋ฅผ ์ •์˜ํ•˜๋Š” ์ฝ”๋“œ } ์—ฌ๊ธฐ์„œ `return_ty.. 2023. 8. 7.
[C++] 18. Standard Library ์ •๋ณตํ•˜๊ธฐ(STL) STL์ด๋ž€? C++ STL(Standard Template Library)์€ C++ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋กœ, ์—ฌ๋Ÿฌ ์œ ์šฉํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•˜๋Š” ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. STL์€ C++ ํ‘œ์ค€์ด๋ฏ€๋กœ C++ ์–ธ์–ด์— ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋งŽ์€ C++ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. STL์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” 'ํ…œํ”Œ๋ฆฟ(Template)'์„ ์‚ฌ์šฉํ•˜์—ฌ ์ œ๋„ค๋ฆญ(generic)ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„๋œ STL ์ปจํ…Œ์ด๋„ˆ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํŠน์ • ์ž๋ฃŒํ˜•์— ์ข…์†๋˜์ง€ ์•Š๊ณ , ๋‹ค์–‘ํ•œ ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์ผ๋ฐ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. STL์€ ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. 1. ์ปจํ…Œ์ด๋„ˆ (Conta.. 2023. 8. 6.
[C++] 17. ์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception), std::exception ์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception) C++์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๊ฐ์ง€ํ•˜๊ณ  ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ์— ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ๋˜๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ์ ์ธ C++ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ์™ธ ๋˜์ง€๊ธฐ (Throwing Exceptions) ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ๋•Œ๋Š” throw ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. throw ํ‚ค์›Œ๋“œ ๋’ค์—๋Š” ์˜ˆ์™ธ ๊ฐ์ฒด๊ฐ€ ์˜ต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ์™ธ ๊ฐ์ฒด๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค ๊ฐ์ฒด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. void doSomething(int value) { if (value.. 2023. 7. 23.