I am trying to design thread-safe data structure that I cna use as a buffer in my application. Can you please give me comments about this code and what can be improved:
#include <deque>
#include <thread>
#include <mutex>
#include <condition_variable>
template <typename T>
class Buffer
{
public:
void add(T num)
{
while (true)
{
std::unique_lock<std::mutex> locker(mu);
buffer.push_back(num);
locker.unlock();
cond.notify_all();
return;
}
}
T remove()
{
while (true)
{
std::unique_lock<std::mutex> locker(mu);
cond.wait(locker, [this](){return buffer.size() > 0;});
T back = buffer.back();
buffer.pop_back();
locker.unlock();
cond.notify_all();
return back;
}
}
int size()
{
std::unique_lock<std::mutex> locker(mu);
int s = buffer.size();
locker.unlock();
return s;
}
private:
std::mutex mu;
std::condition_variable cond;
std::deque<T> buffer;
};