кольцевой буфер с использованием мьютекса

Это было из викторины, которую мой профессор хотел, чтобы мы бросили вызов. он сказал, что этот класс о круговом буфере, но у него есть серьезная проблема. Я пытаюсь думать целый день, но понятия не имею. пожалуйста, дайте мне несколько идей

#include <stdint.h>
#include <boost/thread.hpp>

template <typename T, uint32_t max>
class CircularBuffer
{
public:

CircularBuffer() : m_WriteOffset(0), m_ReadOffset(0){}
~CircularBuffer(){};

void push( T val )
{
boost::lock_guard<boost::mutex> guard( m_Mutex );
m_Buffer[m_WriteOffset++] = val;
}

T pull()
{
boost::lock_guard<boost::mutex> guard( m_Mutex );
return m_Buffer[m_ReadOffset++];
}

private:

boost::mutex m_Mutex;

enum { MAX_SIZE = max };
T m_Buffer[MAX_SIZE];
uint32_t m_WriteOffset;
uint32_t m_ReadOffset;
};

-1

Решение

full, empty методы не реализованы.
Смещение должно быть как m_ReadOffset = (m_ReadOffset + 1) % MAX_SIZEтогда только буфер будет круглым. Я имею в виду как чтение, так и запись.

1

Другие решения

Вы просили подсказку, так что вот один:

Что произойдет, если вы нажмете MAX_SIZE + 1 элемент перед чтением любого?

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector