複数のリーダーと複数のライターを持つ名前付きパイプを使用してプログラムを作成しています。アイデアは、その名前付きパイプを使用して、リーダー/ライターのペアを作成することです。あれは:
- Aはパイプを読み取ります
- Bはパイプに書き込みます(その逆)
- ペアABが作成されました!
1つのプロセスのみが読み取りで、もう1つが書き込みであることを確認するために、flockで2つのロックを使用しました。ちょうどこのような。
リーダーコード:
echo "[JOB $2, Part $REMAINING] Taking next machine..."
VMTAKEN=$((
flock -x 200;
cat $VMPIPE;
)200>$JOINQUEUELOCK)
echo "[JOB $2, Part $REMAINING] Machine $VMTAKEN taken..."
ライターコード:
((
flock -x 200;
echo "[MACHINE $MACHINEID] I am inside the critical section"
echo "$MACHINEID" > $VMPIPE;
echo "[MACHINE $MACHINEID] Going outside the critical section"
)200>$VMQUEUELOCK)
echo "[MACHINE $MACHINEID] Got new Job"
次の問題が発生することがあります。
[MACHINE 3] I am inside the critical section
[JOB 1, Part 249] Taking next machine...
[MACHINE 3] Going outside the critical section
[MACHINE 1] I am inside the critical section
[MACHINE 1] Going outside the critical section
[MACHINE 1]: Got new Job
[MACHINE 3]: Got new Job
[JOB 1, Part 249] Machine 3
1 taken...
ご覧のとおり、読者が読み終える前に別の作家が書いています。この問題を取り除くために私は何ができますか?ACKパイプか何かを使うべきですか?
前もって感謝します