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....