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

📄 boundedbuffer.cc

📁 linux的例子,就是下载后到自己的机子上去运行
💻 CC
字号:
#include "BoundedBuffer.h"BoundedBuffer::BoundedBuffer(int maxsize){	MaxSize = maxsize;	buffer = new char[MaxSize];	lock = new Lock("list lock");	notEmpty = new Condition("list empty cond");	notFull = new Condition("list full cond");	n = in = out = 0;}BoundedBuffer::~BoundedBuffer(){	delete lock;	delete notEmpty;	delete notFull;}int BoundedBuffer::Read(void *data,int size){	int lest,i,s,all = size,Rsize = 0;	char *temp = new char[MaxSize];	lock->Acquire();	while(Rsize < all)	{		i = 0;		while(n == 0)			notEmpty->Wait(lock);		lest = MaxSize - out;		if(n > size)		{			if(lest >= size)				memcpy(temp+Rsize,buffer+out,size);			else			{				memcpy(temp+Rsize,buffer+out,lest);				memcpy(temp+Rsize+lest,buffer,size - lest);			}			while(i<size)			{				buffer[out] = ' ';				out = (out + 1)%MaxSize;				i++;			}			n = n - size;			Rsize = Rsize + size;		}		else		{			s = n;				if(lest >= s)				memcpy(temp+Rsize,buffer+out,s);			else			{				memcpy(temp+Rsize,buffer+out,lest);				memcpy(temp+Rsize+lest,buffer,s-lest);			}			while(i<s)			{				buffer[out] = ' ' ;				out = (out + 1)%MaxSize;				i++;			}			n = 0;			Rsize = Rsize + s;			size = size - Rsize;		}	}	memcpy(data,temp,all);	notFull->Signal(lock);	lock->Release();	return 1;}int BoundedBuffer::Write(void *data,int size){	int lest,s,all = size,Wsize = 0;	char *temp = new char[MaxSize];	memcpy(temp,data,size);	lock->Acquire();	while(Wsize < all)	{		while(n >= MaxSize)			notFull->Wait(lock);		lest = MaxSize - in;		if(MaxSize-n > size)		{			if(lest >= size)				memcpy(buffer+in,temp+Wsize,size);			else			{				memcpy(buffer+in,temp+Wsize,lest);				memcpy(buffer,temp+Wsize+lest,size-lest);			}			Wsize = Wsize + size;			n = n + size;			in = (in + size)%MaxSize;		}		else		{			s = MaxSize - n;			if(lest >= s)				memcpy(buffer+in,temp+Wsize,s);			else			{				memcpy(buffer+in,temp+Wsize,lest);				memcpy(buffer,temp+Wsize+lest,s-lest);			}			n = MaxSize;			size = size - s;			Wsize = Wsize + s;			in = (in + s)%MaxSize;		}	}	notEmpty->Signal(lock);	lock->Release();	return 1;}void BoundedBuffer::printbuffer(){	printf("buffer = %s\n",buffer);}

⌨️ 快捷键说明

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