平成28年度 春期 午前 問6
基礎理論
流れ図に示す処理の動作の記述
流れ図に示す処理の動作の記述として,適切なものはどれか。ここで,二重線は並列処理の同期を表す。
〔流れ図〕 開始 → A → 二重線(同期) → その下で B と C が横に並ぶ → 二重線(同期) → そこから左右に伸びた線が,上の二重線の直後(B と C の入口)へ戻る矢印になっている(= B と C の並列処理を繰り返す)。
- アABC 又は ACB を実行してデッドロックになる。
- イAB 又は AC を実行してデッドロックになる。
- ウA の後に BC 又は CB,BC 又は CB,… と繰り返して実行する。
- エA の後に B の無限ループ又は C の無限ループになる。
答えと解説を見る
✓ これが正解ウA の後に BC 又は CB,BC 又は CB,… と繰り返して実行する。
解説
二重線で分かれて待ち合わせ、戻り矢印で組ごと繰り返します。
この流れ図には二重線が二本あり、設問がそれを並列処理の同期だと断っています。上の二重線は、一本だった流れを B と C の二本に分ける役です。下の二重線は、B と C が両方とも終わるまで待ってから一本に戻す役です。同期とは、先に終わったほうが遅いほうを待つことだと読み替えると迷いません。流れをたどります。まず A を実行し、次に分かれて B と C を並列に実行し、両方そろうまで待ちます。そして戻り矢印が下の二重線から出て B と C の入口へ戻るので、また B と C を並列に実行します。どちらが先に終わるかは決まらないので、実行される順序は B から C のこともあれば C から B のこともあります。したがって A の後は、B と C の組が順序を問わず繰り返されます。デッドロックかどうかも切り分けておきます。デッドロックとは、互いに相手の解放を待って双方とも進めなくなる状態です。この図では B と C が互いに何かを要求しておらず、待つのは下の二重線での一度だけなので、その状態にはなりません。
ほかの選択肢はなぜ違うのか
- アABC 又は ACB を実行してデッドロ…:並ぶ順序の読み方までは合っていますが、待ち合わせをそのまま行き詰まりだと取った形です。互いに相手を待つ関係がないため、二つとも終わって先へ進めます。
- イAB 又は AC を実行してデッドロック…:上の二重線を、どちらか一方を選ぶ分かれ道として読んだ形です。ここは選ぶ分岐ではなく両方を走らせる印なので、片方だけが実行されて止まることはありません。
- エA の後に B の無限ループ又は C の…:戻り矢印が片側だけに掛かっていると読んだ形です。矢印は両方そろった後の位置から出ているので、何度も実行されるのは片方ではなく二つの組になります。
出典:平成28年度 春期 応用情報技術者試験 午前 問6
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)