20 #ifndef PAGE_CIRCULAR_BUFFER_CC
21 #define PAGE_CIRCULAR_BUFFER_CC
35 pthread_mutex_init(&(this->
mutex), NULL);
37 pthread_cond_init(&(this->
cond), NULL);
43 pthread_mutex_destroy(&(this->
mutex));
44 pthread_cond_destroy(&(this->
cond));
50 cout <<
"PageCircularBuffer: Out of Memory in Heap.\n";
51 this->
logger->writeLn(
"PageCircularBuffer: Out of Memory in Heap.");
70 if (i % 10000000 == 0) {
71 this->
logger->info(std::to_string(i) +
72 std::string(
":PageCircularBuffer: array is full."));
74 pthread_cond_signal(&(this->
cond));
78 this->
logger->writeLn(
"PageCircularBuffer:got a place.");
82 pthread_mutex_lock(&(this->
mutex));
84 pthread_cond_broadcast(&(this->
cond));
86 pthread_cond_signal(&(this->
cond));
88 pthread_mutex_unlock(&(this->
mutex));
95 pthread_mutex_lock(&(this->
mutex));
97 this->
logger->writeLn(
"PageCircularBuffer: array is empty.");
98 pthread_cond_wait(&(this->
cond), &(this->
mutex));
101 this->
logger->debug(
"PageCircularBuffer: not empty, return the head element");
105 pthread_mutex_unlock(&(this->
mutex));
108 pthread_mutex_unlock(&(this->
mutex));
121 this->
logger->debug(std::string(
"this->pageArrayHead=") + std::to_string(this->
pageArrayHead));
122 this->
logger->debug(std::string(
"this->pageArrayTail=") + std::to_string(this->
pageArrayTail));
133 pthread_mutex_lock(&(this->
mutex));
135 pthread_cond_broadcast(&(this->
cond));
136 pthread_mutex_unlock(&(this->
mutex));
shared_ptr< PDBPage > PDBPagePtr
pthread_mutex_t addPageMutex
unsigned int pageArrayTail
unsigned int pageArrayHead
int addPageToTail(PDBPagePtr page)
PDBPagePtr popPageFromHead()
unsigned int maxArraySize
std::shared_ptr< PDBLogger > PDBLoggerPtr
PageCircularBuffer(unsigned int bufferSize, pdb::PDBLoggerPtr logger)