【发布时间】:2013-08-21 05:49:00
【问题描述】:
这是来自我的教授希望我们挑战的 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;
};
【问题讨论】:
-
给你一个提示:代码中有一个多余的分号。然后,用两个线程编写一个测试,一个用模式写入 N 个元素,另一个读取 N 个元素并验证模式。
-
你应该包括
<cstdint>而不是<stdint.h>。 -
...并使用 std::thread,但前提是您拥有 C++11 编译器。
-
如果您不知道
mutex和lock_guard是什么,那么最好先研究一下。这是您问题级别的基本知识。
标签: c++ boost circular-buffer