C++ Lock-free 메모리풀 구현

이전 글에서는 메모리풀의 개념과 싱글 스레드에서 사용할 메모리풀을 구현해 보았습니다. 이번 글은 thread-safe 한 메모리풀을 구현해 볼겁니다! 😄 ✅ mutex 와 lock-free 로 만들 수 있는데 이번 글은 lock-free 를 이용해서 만들겠습니다. 🚀 Lock-free 메모리풀 ✨ 공유 자원 _header 및 CAS 문제 해결을 위해 Tag 추가 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 #ifndef __LF_MEMORY_POOL_H__ #define __LF_MEMORY_POOL_H__ #include<algorithm> #include<cstring> #include<atomic> template<typename T, size_t capacity = 1024> class LFMemoryPool { struct LinkedList { LinkedList *next; }; using TaggedLinkedList = std::pair<LinkedList *, uint64_t>; static constexpr size_t alignment = std::max(alignof(T), alignof(LinkedList)); static constexpr size_t blockSize = std::max(sizeof(T), sizeof(LinkedList)); public: LFMemoryPool() : _chunk{0,} , _header({nullptr, 0}) { TaggedLinkedList header = _header....

2025년 10월 20일 · 2 min · 382 words · JongBin

C++ 메모리풀 개념 및 구현

프로그램이 런타임 중에 동적으로 메모리를 할당하려면 new/delete 키워드를 사용하여 운영체제한테 메모리를 요구합니다. 이 때 시스템 콜을 시작으로(커널 모드 진입) 전역 힙에서 요청한 크기의 블록을 찾고 Free list 를 관리하며 필요한 경우 메모리 페이지 테이블 업데이트 등의 작업을 수행하고 여러 스레드가 동시에 힙에 접근하는 것을 막기 위해 동기화 작업도 진행됩니다. 현대의 응용 프로그래밍은 이런 내부적인 상황까지 고려하여 설계하지 않겠지만, 최적화 관점에서 볼 때 동적으로 생성하는 것(메모리, 스레드 등등)을 최소화하면 좋다는 것입니다! 😄...

2025년 10월 19일 · 3 min · 529 words · JongBin

Lock-free 작업 큐 스레드풀 구현하기

지난번에 만들었던 스레드풀은 mutex를 이용하여 하나의 작업 큐(공유자원)을 lock-unlock 을 이용하여 각 스레드가 작업을 가져갔습니다. 스레드가 많고 작업 시간이 짧을 수록 더 많은 경쟁을 할 것인데 이로 인해 작업을 처리하는 비용보다 작업을 빼오는 오버헤드가 더 클 것 같습니다. 😨 💡 항상 Lock-free가 빠른 것은 아님! 따라서 벤치마킹 후 성능이 좋은 쪽을 선택해야 합니다. 🚀 Lock-free 작업 큐 구현 기존 스레드풀에서 thread-unsafety 였던 큐를 Lock-free 큐로 변경을 하려고 합니다. 그러기 위해 큐를 직접 구현해야 하는데 큐의 조건은 다음과 같습니다....

2025년 10월 13일 · 7 min · 1305 words · JongBin

vcpkg 로 C++ 외부 종속 라이브러리 관리하기

vcpkg 로 C++ 외부 종속 라이브러리 관리하기 💡 Quotation > vcpkg는 플랫폼 간 C/C++ 패키지 관리자입니다. 수천 개의 고품질 오픈 소스 라이브러리에 액세스하여 애플리케이션을 강화하고 내부적으로 프라이빗 구성 요소 컬렉션을 공유합니다. - MSDN 윈도우와 리눅스에서 C/C++ 개발을 위해 CMake 프로젝트를 시작했는데, C/C++ 은 Python의 pip 나 Node.JS의 npm 과 같은 패키지 매니저가 없을까 하다 찾아보니 vcpkg 라는 것이 있길래 사용해 보았습니다. 마이크로소프트가 만들고 리눅스와 윈도우 둘 다 사용 가능하며 CMake 와도 찰떡이라는 말이 있습니다!...

2025년 10월 01일 · 1 min · 193 words · JongBin