1
0
This commit is contained in:
Sytnyk Yehor
2025-05-30 22:55:57 +03:00
parent 28ccfa72ac
commit e79109c81a
31 changed files with 1173 additions and 0 deletions

View File

@ -0,0 +1,45 @@
#pragma once
#include <condition_variable>
#include <mutex>
#include <optional>
#include <queue>
namespace th_safe {
template <typename T> class queue {
public:
void push(const T &value) {
{
std::lock_guard lock(mutex_);
queue_.push(value);
}
cond_var_.notify_one();
}
std::optional<T> pop() {
std::unique_lock lock(mutex_);
cond_var_.wait(lock, [this] { return !queue_.empty() || done_; });
if (queue_.empty())
return std::nullopt;
T value = queue_.front();
queue_.pop();
return value;
}
void done() {
{
std::lock_guard lock(mutex_);
done_ = true;
}
cond_var_.notify_all();
}
private:
std::queue<T> queue_;
std::mutex mutex_;
std::condition_variable cond_var_;
bool done_ = false;
};
} // namespace th_safe