9#include <condition_variable>
25 template<
typename RESOURCE_TYPE>
39 std::unique_lock<std::mutex> locker(m_queueLock);
40 while(!m_shutdown.load() && m_resources.size() == 0)
42 m_semaphore.wait(locker, [&](){
return m_shutdown.load() || m_resources.size() > 0; });
45 assert(!m_shutdown.load());
47 RESOURCE_TYPE resource = m_resources.back();
48 m_resources.pop_back();
61 std::lock_guard<std::mutex> locker(m_queueLock);
62 return m_resources.size() > 0 && !m_shutdown.load();
72 std::unique_lock<std::mutex> locker(m_queueLock);
73 m_resources.push_back(resource);
75 m_semaphore.notify_one();
85 m_resources.push_back(resource);
99 std::unique_lock<std::mutex> locker(m_queueLock);
103 while (m_resources.size() < resourceCount)
105 m_semaphore.wait(locker, [&]() {
return m_resources.size() == resourceCount; });
115 std::mutex m_queueLock;
116 std::condition_variable m_semaphore;
117 std::atomic<bool> m_shutdown;
Aws::Vector< RESOURCE_TYPE > ShutdownAndWait(size_t resourceCount)
ExclusiveOwnershipResourceManager()
void Release(RESOURCE_TYPE resource)
void PutResource(RESOURCE_TYPE resource)
bool HasResourcesAvailable()
std::vector< T, Aws::Allocator< T > > Vector