首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

读写环形缓冲区的有关问题

2012-02-25 
读写环形缓冲区的问题结构体里定义了读指针和写指针,怎么样通过这2个指针来计算出缓冲区里是满的,是空的,

读写环形缓冲区的问题
结构体里定义了读指针和写指针,怎么样通过这2个指针来计算出缓冲区里是满的,是空的,或者还有多少剩余的空间啊?
菜鸟求助饿

谢谢饿

[解决办法]
不知道你的缓冲区是怎么定义的,一般是循环链表或者数组进行组织,相对来说简单。下面具体说一下各种情况的判断。

如果缓冲区是满的:也就是无法向其中写东东了,这时候写指针后移一项就等于读指针了。

如果缓冲区是空的:也就是没有东西可读,此时读指针等于写指针。

至于还剩多少个:如果是链表的话(要么有个计数、要么移动写指针看看什么时候等于读指针,自己计算一下)。如果是数组的话,读指针减去写指针。
[解决办法]

C/C++ code
while( not_stop ){    if( readp ^ writep )    {           // 有数据            int l;          l = writep - readp;          l &= ( 缓冲区的大小 - 1 );          if( l == ( 缓冲区的大小 - 1 ) )          {                 // 满            }     }    else    {           // 无数据,空     }}
[解决办法]
探讨

缓冲区是用数组定义的,,它是环形的,就是读写指针移动到末尾的时候,就回来了。。
这样用读指针减去写指针,能算还剩多少个吗。。

[解决办法]
很简单啊,判断读写指针是不是指在同一个地方就可以了。
环形队列无所谓的满不满的问题,本省就是一个环,循环就可以了。如果要计算满的话,封装结构体的时候加一个count的成员就可以了。count++加到头清零继续就可以了

热点排行