35 : _free_pools(), _occupied_pools(), _sem(), _mtx()
46 _occupied_pools.splice(std::begin(_occupied_pools), _free_pools, std::begin(_free_pools));
47 return _occupied_pools.front().get();
55 auto it = std::find_if(std::begin(_occupied_pools),
std::end(_occupied_pools), [pool](
const std::unique_ptr<IMemoryPool> &pool_it)
57 return pool_it.get() == pool;
60 _free_pools.splice(std::begin(_free_pools), _occupied_pools, it);
70 _free_pools.push_front(std::move(pool));
73 _sem = std::make_unique<arm_compute::Semaphore>(_free_pools.size());
81 if(!_free_pools.empty())
83 std::unique_ptr<IMemoryPool> pool = std::move(_free_pools.front());
85 _free_pools.pop_front();
88 _sem = std::make_unique<arm_compute::Semaphore>(_free_pools.size());
110 return _free_pools.size() + _occupied_pools.size();
std::unique_ptr< IMemoryPool > release_pool() override
Releases a free pool from the managed pools.
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
Copyright (c) 2017-2021 Arm Limited.
void register_pool(std::unique_ptr< IMemoryPool > pool) override
Register pool to be managed by the pool.
void clear_pools() override
Clears all pools managed by the pool manager.
#define ARM_COMPUTE_ERROR_ON_MSG(cond, msg)
void end(TokenStream &in, bool &valid)
void unlock_pool(IMemoryPool *pool) override
Releases memory pool.
PoolManager()
Default Constructor.
std::lock_guard< Mutex > lock_guard
Wrapper of lock_guard data-object.
IMemoryPool * lock_pool() override
Locks a pool for execution.
size_t num_pools() const override
Returns the total number of pools managed by the pool manager.