以下是硬拷贝本身的“操作系统概念”第 7 版 Galvin,Gagne 第 3 章的摘录:
以下变量驻留在生产者和消费者进程共享的内存区域中:
#define BUFFER_SIZE 10
typedef struct {
. . .
} item;
item buffer[ BUFFER_SIZE ];
int in = 0;
int out = 0;
共享缓冲区实现为具有两个逻辑指针的循环数组:in和out。变量in指向缓冲区中的下一个空闲位置;out指向缓冲区中的第一个完整位置。当in==out;
缓冲区已满时,缓冲区为空((in+1)%BUFFER_SIZE)==out
。
该方案最多允许同时BUFFER_SIZE-1
在缓冲区中的最多项目。
我用粗体突出了我的困惑。这是该章在线幻灯片的链接(但它已经编辑了本书的几行)。转到“使用共享内存的生产者-消费者示例”部分
http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/3_Processes.html
BUFFER_SIZE-1
为什么缓冲区中可以有项目?如果我们从buffer[0]
to开始buffer[BUFFERSIZE-1]
,它不等于BUFFER_SIZE
项目数吗?作者的意思是说缓冲区的索引不能超过BUFFER_SIZE-1
吗?但是后来,他明明写了同时不能超过的项BUFFER_SIZE-1
数。请解释整个事情。