Пытаюсь создать потокобезопасную очередь с 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);
    };

  
};

Ответы (0 шт):