這是來自我的教授希望我們挑戰的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編譯器。 –