This commit is contained in:
Siarhei Fedartsou 2024-07-11 18:05:16 +02:00
parent 6d2fc45476
commit abbe5e25a5

View File

@ -6,6 +6,7 @@
#include <boost/assert.hpp> #include <boost/assert.hpp>
#include <cstdlib> #include <cstdlib>
#include <iostream> #include <iostream>
#include <mutex>
#include <new> #include <new>
#include <vector> #include <vector>
@ -28,6 +29,7 @@ public:
T *allocate(std::size_t n) T *allocate(std::size_t n)
{ {
std::lock_guard<std::mutex> lock(mutex_);
size_t free_list_index = get_next_power_of_two_exponent(n); size_t free_list_index = get_next_power_of_two_exponent(n);
auto &free_list = free_lists_[free_list_index]; auto &free_list = free_lists_[free_list_index];
const auto items_in_block = 1u << free_list_index; const auto items_in_block = 1u << free_list_index;
@ -50,19 +52,23 @@ public:
void deallocate(T *p, std::size_t n) noexcept void deallocate(T *p, std::size_t n) noexcept
{ {
std::lock_guard<std::mutex> lock(mutex_);
size_t free_list_index = get_next_power_of_two_exponent(n); size_t free_list_index = get_next_power_of_two_exponent(n);
free_lists_[free_list_index].push_back(p); free_lists_[free_list_index].push_back(p);
} }
~MemoryManager() ~MemoryManager()
{ {
for (auto block : blocks_) // std::lock_guard<std::mutex> lock(mutex_);
{ // for (auto block : blocks_)
std::free(block); // {
} // std::free(block);
// }
} }
private: private:
std::mutex mutex_;
MemoryManager() = default; MemoryManager() = default;
MemoryManager(const MemoryManager &) = delete; MemoryManager(const MemoryManager &) = delete;
MemoryManager &operator=(const MemoryManager &) = delete; MemoryManager &operator=(const MemoryManager &) = delete;