我正在研究操作系统概念第8版中的操作系统。
在关于这个过程的章节中,我不了解共享内存系统的一件事。
以下变量驻留在生产者和使用者进程共享的内存区域中:
#define BUFFER_SIZE 10
typedef struct{
...
}iten;
item buffer[BUFFER_SIZE];
int i = 0;
int out = 0;
共享缓冲区实现为一个循环数组,包含2个逻辑指针,in和out。变量指向缓冲区中的下一个自由位置,out指向缓冲区中的第一个完整位置。
制片人流程:
item nextProceduced
while(true){
/*produce an intem in nextProduced*/
while(((in+1)%BUFFER_SIZE) == out)
;//do nothing
buffer[in] = nextProceduced;
in = (in+1) % BUFFER_SIZE;
}
消费者流程:
item nextConsume
while(true){
/*produce an intem in nextProduced*/
while(in == out)
;//do nothing
nextComsumed = buffer[out]
out = (out+1) % BUFFER_SIZE;
}
它说:"缓冲区在= = out时为空,缓冲区为满((i + 1)%BUFFER_SiZE)== out,此方案最多允许BUFFER_SIZE-1项同时在缓冲区"。
对于声明:"当((i + 1)%BUFFER_SiZE)== out"时,缓冲区已满,我实际上并不认真对待。
例如,如果缓冲区已满,那么"在"将指向缓冲区[9]元素," out"将指向buffer [8]元素,当((i + 1)%BUFFER_SiZE)== out时,缓冲区如何填满?