⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boundedbuffer.cc

📁 nachos系统作业 实现线程系统 实现一个电梯模拟 附实验报告
💻 CC
字号:

#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -