1

だから、どうしたらいいのかわからないという問題があります。対処方法を教えていただければ幸いです。

共有メモリに N 個のバッファを割り当てる必要があります。各バッファは 0 に初期化する必要があります。次に、N/2 個の子プロセスをフォークする必要があります。

次に、各子 (i) は値 (i) をバッファー (i) に書き込み、1 秒間スリープします。次に、現在のバッファの値を読み取り、その間に値が変更された場合はメッセージを表示します。次に、子は i 位置を N/2 回移動します。

So I can have 
N Buffers = 11. (must be prime)
N/2 children = 5.

So child 2 would:
write into buffer 2, sleep, read from buffer 2. (now move 2 positions)
write into buffer 4, sleep, read from buffer 4. (now move 2 positions)
**remmeber we only have five buffers so we go around again*****
write into buffer 1, sleep, read from buffer 1. (now move 2 positions)
write into buffer 3, sleep, read from buffer 3. (now move 2 positions)
write into buffer 5, sleep, read from buffer 5. ***we stop moving here. N/2 moves already performed.

これをどのように行うべきかについてのアイデアはありますか?

  • N 個の整数の配列を作成することはできますか? すべての子が同じ要素にアクセスするので、これは問題になりますか?
4

2 に答える 2

4

共有メモリ処理のための古典的なSystemVIPC機能は次のとおりです。

POSIXに相当するものは次のとおりです。

mmap()開いた共有メモリオブジェクトをプロセスのアドレス空間にロードするために使用します。

于 2009-11-03T00:19:33.827 に答える
0

N個の整数の配列を作成できますか?すべての子が同じ要素にアクセスするので、これは問題になりますか?

ええ、私はそう思います。複数のスレッドを使用している場合は、次のように宣言します。

volatile int sharedChannel[N];

個別のプロセスを使用していて、共有メモリバッファを提供する関数を使用している場合は、次のようなものが必要になります。

volatile int *sharedChannel;
于 2009-11-03T00:19:26.463 に答える