Rüp*_*ure 3 c operating-system producer-consumer circular-buffer
以下是摘自"操作系统概念"第7版高尔文,加涅第3章的硬拷贝本身:
以下变量驻留在生产者和使用者进程共享的内存区域中:
#define BUFFER_SIZE 10
typedef struct {
. . .
} item;
item buffer[ BUFFER_SIZE ];
int in = 0;
int out = 0;
Run Code Online (Sandbox Code Playgroud)
共享缓冲器被实现为具有两个逻辑指针的圆形阵列:在与出 .The变量在指向在缓冲器中的下一个自由位置; 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]到buffer[BUFFERSIZE-1],是不是等于BUFFER_SIZE项目数?作者是否意味着说缓冲区的索引不能超过BUFFER_SIZE-1?但是,他已经明确写出了同时不能超过的项目数BUFFER_SIZE-1.请解释整件事.
mvp*_*mvp 13
当你有环形缓冲器,则通常有2个指针或偏移,这意味着start与end在缓冲器中的数据的.start= = 时判断缓冲区是否为空的典型约定end.
该约定导致对BUFFER_SIZE - 1环形缓冲区中的项目总数的限制.如果我们允许填充它BUFFER_SIZE,这将意味着start== end,因此无法判断缓冲区是完全空的还是完全填满.
如果再创建一个保持缓冲区中项目数的变量,则可以区分并允许将缓冲区填充到最大值.但是,不这样做更容易,只需将项目的最大数量减少1.
| 归档时间: |
|
| 查看次数: |
4842 次 |
| 最近记录: |