HOME»応用情報技術者試験掲示板»平成22年春期午後問7
投稿する
ですが、タイマタスクは、走行通知出しません。
No.2の説明で使われている人たちを流用させていただきます。
Tさんは、タイマタスクなので時間を計るだけです。
ストップウォッチで時間を計っているようなものです。
Bの処理開始で、スタートしT秒経過したら「時間だよ。」と知らせます。
(タイムアウトで、ストップウォッチストップ&リセット、Cに進みます。)
タイムアウト以外でストップウォッチストップ&リセット、Cに進むのは、
・イベントフラグがセットされている場合
・走行距離タスクがイベントフラグをセットする場合
です。
問題なのは、CとDの間で「走行距離タスクがイベントフラグをセット」しちゃった場合です。(タイマタスクは、クリアしておきたいのに、すぐセットされた。)
・・・Lさんは、タイマタスクとは独立なので、自分の仕事をしています。Lメートル走行したら、イベントフラグをセットします。
その後DEFと実行しABに戻ります。
Bの処理開始、フラグがクリアされていないので、すぐにストップウォッチストップ&リセット
Cに進みます。(イベントフラグクリア)DEFと実行しABに戻ります。
こんな流れになると思いますが、如何でしょうか。
[4054] 平成22年春期午後問7
なおさん(No.1)
https://www.ap-siken.com/kakomon/22_haru/pm07.html
設問1の問題のあるフローが何度読んでも理解できません。
どなたか解説していただけないでしょうか?
設問1の問題のあるフローが何度読んでも理解できません。
どなたか解説していただけないでしょうか?
2023.03.17 15:14
jjon-comさん(No.2)
★AP ゴールドマイスター
「図 料金計算タスクの処理の流れ」の主要タスクのみ取り上げてみます。
次のような3者が会話しているような姿はイメージできているのでしたっけ?
--------
Rさん(料金計算タスク)
Lさん(走行距離通知タスク)
Tさん(タイマタスク)
A Rさん → Lさん
「Lメートル走行したら私に教えて」と走行完了通知要求を送信
B-1 Rさん → Tさん
「T秒経過したら私に教えて」とタイムアウト通知要求を送信
B-2 待ち状態。次のどれかが起きたら待ち状態を解除してCへ
(a) 既にイベントフラグがセットされている
(b) Lさんから走行完了通知あり(イベントフラグのセット)
(c) Tさんからタイムアウト通知あり
ちなみに
(a)(b)の場合はイベントフラグがセットされてCに進むので,
タイムアウトのカウントダウンは止まります。
(c)の場合はイベントフラグがセットされていない状態でCに進むので,
処理Dを終えるまではまだ走行完了通知要求がやってくる可能性があります。
C イベントフラグのクリア
D Aの走行通知要求の取り消し
--------
このような姿がイメージできていれば,
設問1の[ a ]〜[ e ]の空欄がある問題文は分かりやすくなるんじゃないでしょうか。
次のような3者が会話しているような姿はイメージできているのでしたっけ?
--------
Rさん(料金計算タスク)
Lさん(走行距離通知タスク)
Tさん(タイマタスク)
A Rさん → Lさん
「Lメートル走行したら私に教えて」と走行完了通知要求を送信
B-1 Rさん → Tさん
「T秒経過したら私に教えて」とタイムアウト通知要求を送信
B-2 待ち状態。次のどれかが起きたら待ち状態を解除してCへ
(a) 既にイベントフラグがセットされている
(b) Lさんから走行完了通知あり(イベントフラグのセット)
(c) Tさんからタイムアウト通知あり
ちなみに
(a)(b)の場合はイベントフラグがセットされてCに進むので,
タイムアウトのカウントダウンは止まります。
(c)の場合はイベントフラグがセットされていない状態でCに進むので,
処理Dを終えるまではまだ走行完了通知要求がやってくる可能性があります。
C イベントフラグのクリア
D Aの走行通知要求の取り消し
--------
このような姿がイメージできていれば,
設問1の[ a ]〜[ e ]の空欄がある問題文は分かりやすくなるんじゃないでしょうか。
2023.03.17 16:52
なおさん(No.3)
ありがとうございます。
何となく流れは掴めましたが、なんかしっくり来ません。。
たとえば、問題が起きるフローだと一つの走行通知要求に対して二つの走行通知が届いているわけですよね?
走行距離通知タスクは走行距離を測っているはずなのになぜこんな動きになるのでしょうか?
また、フラグが取り消される前に走行通知が届きことが問題なら、その前段階でタイムアウトしているというのは、この問題と何の関係があるのですか?
何となく流れは掴めましたが、なんかしっくり来ません。。
たとえば、問題が起きるフローだと一つの走行通知要求に対して二つの走行通知が届いているわけですよね?
走行距離通知タスクは走行距離を測っているはずなのになぜこんな動きになるのでしょうか?
また、フラグが取り消される前に走行通知が届きことが問題なら、その前段階でタイムアウトしているというのは、この問題と何の関係があるのですか?
2023.03.20 17:02
boyonboyonさん(No.4)
★AP シルバーマイスター
>スレ主さん
>一つの走行通知要求に対して二つの走行通知が届いているわけですよね?
ですが、タイマタスクは、走行通知出しません。
>jjon-comさん
No.2の説明で使われている人たちを流用させていただきます。
Tさんは、タイマタスクなので時間を計るだけです。
ストップウォッチで時間を計っているようなものです。
Bの処理開始で、スタートしT秒経過したら「時間だよ。」と知らせます。
(タイムアウトで、ストップウォッチストップ&リセット、Cに進みます。)
タイムアウト以外でストップウォッチストップ&リセット、Cに進むのは、
・イベントフラグがセットされている場合
・走行距離タスクがイベントフラグをセットする場合
です。
問題なのは、CとDの間で「走行距離タスクがイベントフラグをセット」しちゃった場合です。(タイマタスクは、クリアしておきたいのに、すぐセットされた。)
・・・Lさんは、タイマタスクとは独立なので、自分の仕事をしています。Lメートル走行したら、イベントフラグをセットします。
その後DEFと実行しABに戻ります。
Bの処理開始、フラグがクリアされていないので、すぐにストップウォッチストップ&リセット
Cに進みます。(イベントフラグクリア)DEFと実行しABに戻ります。
こんな流れになると思いますが、如何でしょうか。
2023.03.20 19:16
なおさん(No.5)
ありがとうございます。
書いていただいた流れだと、
@料金計算タスクから走行通知要求が出る
A料金計算タスクからイベントフラグセット要求待ちが出る
Bタイムアウト
Cイベントフラグがセットされてしまう(例えば、10km分走行した)
Dイベントフラグクリア
E2回目のイベントフラグセット(例えば、10km分走行した)
F走行通知要求取消し
G金額加算など
〜2ループ目〜
H料金計算タスクから走行通知要求が出る
I料金計算タスクからイベントフラグセット要求待ちが出る
11既にフラグがセットされているのでフラグがセットされない
12イベントフラグクリア
こちらであっているでしょうか?
問題では過大請求が起きる、とあるので上で言うCとDで10kmしか走っていないのに20km走ったことになっているのが問題なのでしょうか?
理解が悪く申し訳ありませんがよろしくお願いします。
書いていただいた流れだと、
@料金計算タスクから走行通知要求が出る
A料金計算タスクからイベントフラグセット要求待ちが出る
Bタイムアウト
Cイベントフラグがセットされてしまう(例えば、10km分走行した)
Dイベントフラグクリア
E2回目のイベントフラグセット(例えば、10km分走行した)
F走行通知要求取消し
G金額加算など
〜2ループ目〜
H料金計算タスクから走行通知要求が出る
I料金計算タスクからイベントフラグセット要求待ちが出る
11既にフラグがセットされているのでフラグがセットされない
12イベントフラグクリア
こちらであっているでしょうか?
問題では過大請求が起きる、とあるので上で言うCとDで10kmしか走っていないのに20km走ったことになっているのが問題なのでしょうか?
理解が悪く申し訳ありませんがよろしくお願いします。
2023.03.20 22:52
boyonboyonさん(No.6)
★AP シルバーマイスター
整理して書きます。
<<料金計算タスク>>
この中では、
Aの走行処理通知タスクとBのタイマタスクが、平行して実行されます。
Aは距離の監視、Bは時間の監視です。(条件待ちの状態です。)
どちらかの条件が満たされると次の処理に移ります。
<Aが満たされたとき>
この時は、Bも解除されます。
このときイベントフラグがセットされているので、
Cイベントフラグをクリアします。(初期化)
DEFと実行され始めに戻ります。
特に問題は起きません。
<タイムアウトでBが満たされたとき>
***この時は、まだAが実行継続中です。
この流れですと実際はセットされていませんが、
Cイベントフラグをクリアします。
○○○
DEFと続けば問題ないのですが、
CからDに移る途中の○○○のところで、運悪くAの条件が満たされると、
イベントフラグがセットされてしまいます。
このまま、DEFと実行し始めに戻ります。
***料金は、仕様通り加算されています。
***D走行通知要求を取り消す。フラグをクリアするとは書いてありません。
始めに戻り、ABのタスクが実行されますが、
現在、既にイベントフラグがセットされている状態です。
なので、Bの条件が既に満たされているので、すぐにCから後の処理になります。
***ほとんど時間がたっていないのに、料金が加算される。
これで如何でしょうか。
<<料金計算タスク>>
この中では、
Aの走行処理通知タスクとBのタイマタスクが、平行して実行されます。
Aは距離の監視、Bは時間の監視です。(条件待ちの状態です。)
どちらかの条件が満たされると次の処理に移ります。
<Aが満たされたとき>
この時は、Bも解除されます。
このときイベントフラグがセットされているので、
Cイベントフラグをクリアします。(初期化)
DEFと実行され始めに戻ります。
特に問題は起きません。
<タイムアウトでBが満たされたとき>
***この時は、まだAが実行継続中です。
この流れですと実際はセットされていませんが、
Cイベントフラグをクリアします。
○○○
DEFと続けば問題ないのですが、
CからDに移る途中の○○○のところで、運悪くAの条件が満たされると、
イベントフラグがセットされてしまいます。
このまま、DEFと実行し始めに戻ります。
***料金は、仕様通り加算されています。
***D走行通知要求を取り消す。フラグをクリアするとは書いてありません。
始めに戻り、ABのタスクが実行されますが、
現在、既にイベントフラグがセットされている状態です。
なので、Bの条件が既に満たされているので、すぐにCから後の処理になります。
***ほとんど時間がたっていないのに、料金が加算される。
これで如何でしょうか。
2023.03.21 00:37
なおさん(No.7)
ありがとうございます!
やっと理解することができました。
ご丁寧に教えていただきありがとうございました!!
やっと理解することができました。
ご丁寧に教えていただきありがとうございました!!
2023.03.24 18:26