读写环形缓冲区的问题
结构体里定义了读指针和写指针,怎么样通过这2个指针来计算出缓冲区里是满的,是空的,或者还有多少剩余的空间啊?
菜鸟求助饿
谢谢饿
[解决办法]
不知道你的缓冲区是怎么定义的,一般是循环链表或者数组进行组织,相对来说简单。下面具体说一下各种情况的判断。
如果缓冲区是满的:也就是无法向其中写东东了,这时候写指针后移一项就等于读指针了。
如果缓冲区是空的:也就是没有东西可读,此时读指针等于写指针。
至于还剩多少个:如果是链表的话(要么有个计数、要么移动写指针看看什么时候等于读指针,自己计算一下)。如果是数组的话,读指针减去写指针。
[解决办法]
- C/C++ code
while( not_stop ){ if( readp ^ writep ) { // 有数据 int l; l = writep - readp; l &= ( 缓冲区的大小 - 1 ); if( l == ( 缓冲区的大小 - 1 ) ) { // 满 } } else { // 无数据,空 }}
[解决办法]
[解决办法]
很简单啊,判断读写指针是不是指在同一个地方就可以了。
环形队列无所谓的满不满的问题,本省就是一个环,循环就可以了。如果要计算满的话,封装结构体的时候加一个count的成员就可以了。count++加到头清零继续就可以了