缓冲器为暂时置放输出或输入资料的内存。缓冲器内资料自储存设备(如硬盘)来,放置在缓冲器中,须待机送至CPU或其他运算设备。缓冲区(buffer)这个中文译意源自当计算机的高速部件与低速部件通讯时,必须将高速部件的输出暂存到某处,以保证高速部件与低速部件相吻合. 后来这个意思被扩展了,成为"临时存贮区"的意思。
这是我的函数,random.txt里面是1到1000随机排列的数,问题是如何加入缓冲,使得缓冲区每回只能进去20个数字,然后出缓冲区,出来50行。你这个要求翻译成程序可大可小
简单点来说
#define CacheSize 20
typedef struct cacheItem{int valuechar bUsed} CacheItem
CacheItem Cache[CacheSize]
CacheItem *pOut=0
CacheItem *pInput=iCacheArray
int iCacheLocker=-1
FILE *fsInputFile = 0
int bIsJobDone=0
void threadInput()
{
读取一个数字
锁定cache
判定当前输入cacheitem是否可写可以的话写入,
如果可写pInput->value,pInput->bUsed=1if(pInput == (Cache+CacheSize))pInput=iCacheArrayelse ++Ipnut
否则停留在当前读取的位置,等待输出线程释放出缓存空间。
释放cache的锁定
如果读取个数达到要求了或者文件末尾,++bIsJobDonereturn
}
void threadOutput()
{
锁定cache
判定当前输入cacheitem是否bUsed,如果可有用,输出pInput->value,pInput->bUsed=0++pOutput
如果不可用 判定读取线程是否结束了bIsJobDone==1?(++bIsJobDone):bIsJobDone
释放cache的锁定
如果bIsJobDone==2,结束输出线程 return
}
void main()
{
open文件
创建输入线程
创建输出线程
while(bIsJobDone!=2);
}
大意如此,你明白撒?
C语言中的缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。
C语缓冲区分为三种类型:1、全缓冲 2、行缓冲 3、不带缓冲。
缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。
举个例子,比如:
从磁盘里取信息,先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的 *** 作大大快于对磁盘的 *** 作,故应用缓冲区可大大提高计算机的运行速度。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)