Race condition (경쟁 조건) 관련 글

예전에 스레드를 공부하다가 Lockfree라는 것을 알게 되었었고 일단 뭐든 만들어보자는 마인드로 MPMC부터 무턱대고 만들었었는데, 지금 와서 생각해 보니 남는 것도 없고 너무 얄팍하게 안 것 같아서 차근차근 개념을 이해하기 위해 작성한 글입니다.. 😎 🔎 Race condition “경쟁은 왜 발생하는 것일까?” “경쟁 상태에 데이터를 읽고 쓰면 무슨 일이 벌어질까?“에 대한 명확한 이해가 먼저 필요했습니다. 상황별로 살펴보도록 하겠습니다. Case 1: Read - Read 어떤 한 데이터를 2개 또는 그 이상 되는 스레드가 모두 읽기만 한다면 아무 일도 일어나지 않습니다....

2026년 10월 06일 · 2 min · 255 words · JongBin

SPSC Queue 만들기

💡 SPSC란? Single-Producer / Single-Consumer 의 약자로 생산자와 소비자가 1:1인 관계를 뜻합니다. 리눅스에서 소켓을 다루다가 스레드간 데이터 전달이 필요해서 알아보니 SPSC Queue가 있다는것을 알게 되었습니다. 제 경우는 클라이언트의 연결을 담당하는는스레드에서 데이터 수신을 담당하는 스레드로 소켓(fd)을 전달해야 했는데 공용 컨테이너와 뮤텍스를 사용하면 스레드가 늘어나면 늘어날수록 오버헤드가 늘 것 같았습니다. 그래서 연결을 담당하는 스레드와 데이터를 수신하는 스레드의 생산-소비가 1:1인 관계에서 뮤텍스 없이 Lock-free 하게 구현해 보려고 합니다. 👍 🚀 구현 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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 // spsc_queue....

2026년 10월 05일 · 4 min · 665 words · JongBin

멀티 스레드와 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