我有以下数组,打算将其用作循环缓冲区。
一个线程写入该数组,另一个线程读取该数组。在读取时,我需要读取该数组中最后三个写入的值。
写入操作正常运行。我使用了:
写作。这将很好地滚动数组索引0到19。
对于阅读,我正在使用
但当我尝试从索引0到19时,它不起作用。
int array1[20];
一个线程写入该数组,另一个线程读取该数组。在读取时,我需要读取该数组中最后三个写入的值。
写入操作正常运行。我使用了:
writeIndex = (writeIndex + 1) %20;
写作。这将很好地滚动数组索引0到19。
对于阅读,我正在使用
readIndex = (readIndex -1)%20;
但当我尝试从索引0到19时,它不起作用。
writeIndex - 2
,writeIndex - 1
和writeIndex
吗?所以readIndex = (writeIndex - 2) % 20
将会给出最后3次写入的起始位置。 - Hunter McMillenreadIndex = (readIndex + 19)%20;
。在这种情况下,您不希望处理负数。 - Todd LireadIndex
和writeIndex
,则很难存储20个项目。当readIndex == writeIndex
时,这意味着队列是满的还是空的?(参见Knuth §2.2.2练习1)。最简单的解决方案是改为维护readIndex
和count
,其中count
是当前在队列中的项目数,并在需要时从这些计算出writeIndex
。 - rob mayoff