semaphore
class Semaphore {
int count;
public:
Semaphore(int initial_count) : count(initial_count) {}
void acquire() {
std::unique_lock<std::mutex> lock(mutex);
while (count == 0) {
cv.wait(lock);
}
--count;
}
void release() {
std::unique_lock<std::mutex> lock(mutex);
++count;
cv.notify_one();
}
private:
std::mutex mutex;
std::condition_variable cv;
};
class ResourcePool {
public:
ResourcePool(int max_resources) : semaphore(max_resources) {}
Resource acquire_resource() {
semaphore.acquire();
return Resource();
}
void release_resource(Resource resource) {
semaphore.release();
}
private:
Semaphore semaphore;
};