平成22年春期午後問7

なおさん  
(No.1)
https://www.ap-siken.com/kakomon/22_haru/pm07.html

設問1の問題のあるフローが何度読んでも理解できません。
どなたか解説していただけないでしょうか?
2023.03.17 15:14
jjon-comさん 
AP プラチナマイスター
(No.2)
「図  料金計算タスクの処理の流れ」の主要タスクのみ取り上げてみます。
次のような3者が会話しているような姿はイメージできているのでしたっけ?

--------
Rさん(料金計算タスク)
Lさん(走行距離通知タスク)
Tさん(タイマタスク)

②    Rさん → Lさん
      「Lメートル走行したら私に教えて」と走行完了通知要求を送信

③-1  Rさん → Tさん
      「T秒経過したら私に教えて」とタイムアウト通知要求を送信

③-2  待ち状態。次のどれかが起きたら待ち状態を解除して④へ
      (a) 既にイベントフラグがセットされている
      (b) Lさんから走行完了通知あり(イベントフラグのセット)
      (c) Tさんからタイムアウト通知あり
      ちなみに
      (a)(b)の場合はイベントフラグがセットされて④に進むので,
      タイムアウトのカウントダウンは止まります。
      (c)の場合はイベントフラグがセットされていない状態で④に進むので,
      処理⑤を終えるまではまだ走行完了通知要求がやってくる可能性があります。

④    イベントフラグのクリア
⑤    ②の走行通知要求の取り消し
--------

このような姿がイメージできていれば,
設問1の[ a ]~[ e ]の空欄がある問題文は分かりやすくなるんじゃないでしょうか。
2023.03.17 16:52
なおさん 
(No.3)
ありがとうございます。
何となく流れは掴めましたが、なんかしっくり来ません。。

たとえば、問題が起きるフローだと一つの走行通知要求に対して二つの走行通知が届いているわけですよね?
走行距離通知タスクは走行距離を測っているはずなのになぜこんな動きになるのでしょうか?
また、フラグが取り消される前に走行通知が届きことが問題なら、その前段階でタイムアウトしているというのは、この問題と何の関係があるのですか?
2023.03.20 17:02
boyonboyonさん 
AP シルバーマイスター
(No.4)
>スレ主さん
>一つの走行通知要求に対して二つの走行通知が届いているわけですよね?
ですが、タイマタスクは、走行通知出しません。

>jjon-comさん
No.2の説明で使われている人たちを流用させていただきます。

Tさんは、タイマタスクなので時間を計るだけです。
ストップウォッチで時間を計っているようなものです。
③の処理開始で、スタートしT秒経過したら「時間だよ。」と知らせます。
(タイムアウトで、ストップウォッチストップ&リセット、④に進みます。)

タイムアウト以外でストップウォッチストップ&リセット、④に進むのは、
・イベントフラグがセットされている場合
・走行距離タスクがイベントフラグをセットする場合
です。

問題なのは、④と⑤の間で「走行距離タスクがイベントフラグをセット」しちゃった場合です。(タイマタスクは、クリアしておきたいのに、すぐセットされた。)
・・・Lさんは、タイマタスクとは独立なので、自分の仕事をしています。Lメートル走行したら、イベントフラグをセットします。
その後⑤⑥⑦と実行し②③に戻ります。

③の処理開始、フラグがクリアされていないので、すぐにストップウォッチストップ&リセット
④に進みます。(イベントフラグクリア)⑤⑥⑦と実行し②③に戻ります。

こんな流れになると思いますが、如何でしょうか。
2023.03.20 19:16
なおさん 
(No.5)
ありがとうございます。

書いていただいた流れだと、
  ①料金計算タスクから走行通知要求が出る
  ②料金計算タスクからイベントフラグセット要求待ちが出る
  ③タイムアウト
  ④イベントフラグがセットされてしまう(例えば、10km分走行した)  
  ⑤イベントフラグクリア
  ⑥2回目のイベントフラグセット(例えば、10km分走行した)
  ⑦走行通知要求取消し
  ⑧金額加算など
  〜2ループ目〜
  ⑨料金計算タスクから走行通知要求が出る
  ⑩料金計算タスクからイベントフラグセット要求待ちが出る
  11既にフラグがセットされているのでフラグがセットされない
  12イベントフラグクリア

こちらであっているでしょうか?

問題では過大請求が起きる、とあるので上で言う④と⑤で10kmしか走っていないのに20km走ったことになっているのが問題なのでしょうか?

理解が悪く申し訳ありませんがよろしくお願いします。
2023.03.20 22:52
boyonboyonさん 
AP シルバーマイスター
(No.6)
整理して書きます。

<<料金計算タスク>>
この中では、
②の走行処理通知タスクと③のタイマタスクが、平行して実行されます。
②は距離の監視、③は時間の監視です。(条件待ちの状態です。)
どちらかの条件が満たされると次の処理に移ります。

<②が満たされたとき>
この時は、③も解除されます。
このときイベントフラグがセットされているので、
④イベントフラグをクリアします。(初期化)
⑤⑥⑦と実行され始めに戻ります。
特に問題は起きません。

<タイムアウトで③が満たされたとき>
***この時は、まだ②が実行継続中です。
この流れですと実際はセットされていませんが、
④イベントフラグをクリアします。
○○○
⑤⑥⑦と続けば問題ないのですが、

④から⑤に移る途中の○○○のところで、運悪く②の条件が満たされると、
イベントフラグがセットされてしまいます。
このまま、⑤⑥⑦と実行し始めに戻ります。
***料金は、仕様通り加算されています。
***⑤走行通知要求を取り消す。フラグをクリアするとは書いてありません。

始めに戻り、②③のタスクが実行されますが、
現在、既にイベントフラグがセットされている状態です。
なので、③の条件が既に満たされているので、すぐに④から後の処理になります。
***ほとんど時間がたっていないのに、料金が加算される。

これで如何でしょうか。
2023.03.21 00:37
なおさん 
(No.7)
ありがとうございます!
やっと理解することができました。
ご丁寧に教えていただきありがとうございました!!
2023.03.24 18:26

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop