Пытаюсь создать потокобезопасную очередь с conditional variable
Мне надо реализовать потокобезопасную очередь с mutex и conditional variable, используя только <thread.h>. Делаю это без учета, что функции queue stl могут выкинуть ошибку. В самом коде не могу понять, как правильно использовать conditional variable. Подскажите, пожалуйста, может есть какие то примеры с использованием?
template <typename T>
class thread_safety_queue
{
private:
std::queue<T> _queue;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
public:
void push(const T& data){
pthread_mutex_lock(&mutex);
_queue.push(data);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
}
bool empty() {
pthread_mutex_lock(&mutex);
bool temp = _queue.empty();
pthread_mutex_unlock(&mutex);
return temp;
}
void get(T& value){
pthread_mutex_lock(&mutex);
while(_queue.empty()){
pthread_cond_wait(&cond, &mutex);
}
value = _queue.front();
_queue.pop();
pthread_mutex_unlock(&mutex);
};
void peek(T& value){
pthread_mutex_lock(&mutex);
while(_queue.empty()){
pthread_cond_wait(&cond, &mutex);
}
value = _queue.front();
pthread_mutex_unlock(&mutex);
};
};