以下は、書籍「オペレーティング システムの概念」第 7 版 Galvin、Gagne の第 3 章のハードコピー自体からの抜粋です。
次の変数は、プロデューサー プロセスとコンシューマー プロセスによって共有されるメモリ領域に存在します。
#define BUFFER_SIZE 10
typedef struct {
. . .
} item;
item buffer[ BUFFER_SIZE ];
int in = 0;
int out = 0;
共有バッファーは、inとoutの 2 つの論理ポインターを持つ循環配列として実装されます。変数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]
からまで開始すると、アイテムの数buffer[BUFFERSIZE-1]
と同じではありませんか? BUFFER_SIZE
著者は、バッファのインデックスが を超えることはできないと言うつもりですか?しかし、同時に項目数を超えることはできないBUFFER_SIZE-1
と明確に書いています。全体を説明してください。BUFFER_SIZE-1