#pragma once #include #include #include template class RingBuffer { std::array data; size_t read = 0; size_t write = 0; bool full = false; std::mutex mtx; std::condition_variable cv; public: void push(int value) { std::lock_guard lock(mtx); data[write] = value; write = (write + 1) % N; if (full) read = (read + 1) % N; full = (write == read); cv.notify_one(); } int pop() { std::unique_lock lock(mtx); cv.wait(lock, [this]{ return full || write != read; }); int val = data[read]; read = (read + 1) % N; full = false; return val; } };