#ifndef RESOURCE_LOCK_H #define RESOURCE_LOCK_H #include #include #include class ResourceLock { public: ResourceLock(unsigned int capacity_) : capacity(capacity_), used(0) { } void lock() { std::unique_lock lock(mutex); if (used == capacity) { released.wait(lock); } ++used; } void unlock() { std::unique_lock lock(mutex); assert(used > 0); --used; released.notify_one(); } private: const unsigned int capacity; unsigned int used; std::mutex mutex; std::condition_variable released; }; #endif