这是来自我的教授希望我们挑战的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个元素并验证模式。 –
你应该包括''而不是''。 –
dyp
...并使用std :: thread,但假设你有一个C++ 11编译器。 –