멀티 스레드와 std::atomic 객체 공부 - 1

멀티 스레드 환경에서 공유 자원은 항상 mutex의 lock - unlock 을 통해 임계 구역을 만든 후 다뤘었습니다. 그러다가 Lock-free 라는 개념을 접했고 std::atomic 객체를 사용해 보면서 여러 스레드가 동시에 공유 자원에 접근하게 된다면 어떻게 보일지 다시 생각해 보게 됐습니다. 🔍 원자성 💡 Quotation 원자성(原子性, atomicity)은 어떤 것이 더 이상 쪼개질 수 없는 성질을 말한다. 어떤 것이 원자성을 가지고 있다면 원자적(atomic)이라고 한다. 어떠한 작업이 실행될 때 언제나 완전하게 진행되어 종료되거나, 그럴 수 없는 경우 실행을 하지 않는 경우를 말한다....

2025년 10월 10일 · 5 min · 933 words · JongBin

멀티 스레드와 std::Atomic 객체 공부 2

🔬 단순 카운트 테스트 (std::atomic vs mutex) 스레드: 12개 스레드당 카운팅: 5천만개 std::atomic 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 #include<iostream> #include<iomanip> #include<atomic> #include<thread> #include<mutex> #include<chrono> #include<vector> const size_t THREAD_NUM = 12; const size_t COUNT_NUM = 50'000'000; std::atomic<int> atomic_counter(0); void increse_counter_with_atomic(std::memory_order mo) { for(size_t i = 0; i < COUNT_NUM; i++) { atomic_counter....

2025년 10월 10일 · 3 min · 531 words · JongBin

Thread Pool 사용 이유 및 C++ 구현

Thread ❓ 💡 스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티 스레드라고 한다. wikipeida 멀티 스레드를 사용하지 않는 프로그램은 찾아보기 어렵습니다. 스레드가 하나인 환경에서 작업이 지연된다면 프로그램 전체가 멈추는 불상사가 생기기 때문이죠. 잘 만들어진 프레임워크를 사용하기 때문에 신경 쓸 필요가 없기 때문이죠! 소스 코드를 여러 단위로, 즉 병렬로 처리할 수 있게 해주는 스레드를 C++에서 어떻게 사용하는지 알아보도록 하겠습니다....

2023년 05월 05일 · 7 min · 1279 words · JongBin