boundedbuffer.cc

来自「nachos test nachos 有关实验」· CC 代码 · 共 74 行

CC
74
字号

#include "BoundedBuffer.h"
// create a bounded buffer with a limit of 'maxsize' bytes
//-------------------------------------------------------------------------------------------BoundedBuffer::BoundedBuffer(int maxsize){       buffersize=maxsize;       readyRead=0;       readyWrite=buffersize;       buffer=(void *)malloc(buffersize);       bufferend=(char *)buffer+buffersize;       nextin=(char *)buffer;       nextout=(char *)buffer;       lock=new Lock("buffer lock");        notreadyRead=new Condition("buffer not ready read cond");			// enforce mutual exclusive access to the table       notreadyWrite=new Condition("buffer not ready write cond");}
//-----------------------------------------------------------------------------------------------BoundedBuffer::~BoundedBuffer(){        delete buffer;      delete lock;      delete notreadyRead;      delete notreadyWrite;   }//---------------------------------------------------------------------------------------------     
     // read 'size' bytes from the bounded buffer, storing into 'data'.
     // ('size' may be greater than 'maxsize')
//----------------------------------------------------------------------------------------------voidBoundedBuffer::Read(void *data, int size)
{     char *p=(char *)data;    lock->Acquire();            while(readyRead<size)                   notreadyRead->Wait(lock);    DEBUG('t',"enter Read() size is %d \n",size);            for(int i=0;i<size;i++)                   {*p++=*nextout++;                    if(nextout==bufferend)nextout=(char *)buffer;                    readyRead--;readyWrite++;}              notreadyWrite->Signal(lock);     lock->Release();}//--------------------------------------------------------------------------------------------------   
     // write 'size' bytes from 'data' into the bounded buffer.
     // ('size' may be greater than 'maxsize')//--------------------------------------------------------------------------------------------------
void BoundedBuffer::Write(void *data, int size)
{    char *p=(char *)data;    lock->Acquire();            while(readyWrite<size)                   notreadyWrite->Wait(lock);    DEBUG('t',"enter Write() size is %d \n",size);            for(int i=0;i<size;i++)                   {*nextin++=*p++;                    if(nextin==bufferend)nextin=(char *)buffer;                    readyWrite--;readyRead++;}             notreadyRead->Signal(lock);     lock->Release();
}

//--------------------------------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?