这是来自compsci讲座测验,我的教授希望我们挑战。他说这个类是关于循环缓冲但是有重大问题。我试着想一整天,但没有任何线索。请给我一些想法
#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;
};
答案 0 :(得分:1)
full
,empty
方法未实施。
偏移量增量必须与m_ReadOffset = (m_ReadOffset + 1) % MAX_SIZE
类似,然后只有缓冲区为循环。我的意思是读写偏移。
答案 1 :(得分:0)
你问了一个提示,所以这里有一个:
如果在读取任何内容之前按下MAX_SIZE + 1个元素会发生什么?