使用互斥锁的循环缓冲区

时间:2013-08-21 05:49:01

标签: c++ boost circular-buffer

这是来自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;
};

2 个答案:

答案 0 :(得分:1)

fullempty方法未实施。 偏移量增量必须与m_ReadOffset = (m_ReadOffset + 1) % MAX_SIZE类似,然后只有缓冲区为循环。我的意思是读写偏移。

答案 1 :(得分:0)

你问了一个提示,所以这里有一个:

如果在读取任何内容之前按下MAX_SIZE + 1个元素会发生什么?