11
Июн
2021

Является ли такая реализация queue потокобезопасной?

Смотрела похожие вопросы, но мне надо сделать queue из stl потокобезопасной, используя mutex из pthread.h. Является ли такая реализация потокобезопасной?

#pragma once
#include <iostream>
#include <pthread.h>
#include <queue>


template <typename T>
class thread_safety_queue
{
private:
    std::queue<T> _queue;
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
public:
    thread_safety_queue(){};
    void push(const T& data)   {
        pthread_mutex_lock(&mutex);
        _queue.push(data);
        pthread_mutex_unlock(&mutex);
    }
    bool empty() {
        pthread_mutex_lock(&mutex);
        bool temp = _queue.empty();
        pthread_mutex_unlock(&mutex);
        return temp;
    };
    void pop(){
        pthread_mutex_lock(&mutex);
        _queue.pop();
        pthread_mutex_unlock(&mutex);

    };
    T& front(){
        pthread_mutex_lock(&mutex);
        T& temp = _queue.front();
        pthread_mutex_unlock(&mutex);
        return temp;
    }
    T& back(){
        pthread_mutex_lock(&mutex);
        T& temp = _queue.back();
        pthread_mutex_unlock(&mutex);
        return temp;
    };
};

Источник: https://ru.stackoverflow.com/questions/1294105/%D0%AF%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%D1%81%D1%8F-%D0%BB%D0%B8-%D1%82%D0%B0%D0%BA%D0%B0%D1%8F-%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-queue-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D0%B9

Тебе может это понравится...

Добавить комментарий