- PR -

スレッドについて

投稿者投稿内容
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-11-21 12:24
質問者のしんさんに質問です。
今まで回答をされた方が疑問点として挙げられている内容をまとめてみました。
以下の点にご返答いただけると回答がしやすくなると思います。

(1) シングルスレッドである、というご説明は正しいですか?
  A.Joinのように書かれているので、AはThreadオブジェクトではないかと考えられます。
  A〜Dがスレッドなのであれば、これはシングルスレッドではなくマルチスレッドです。
  ※これは私の想像ですが、A〜Dは逐次に処理される必要があることを指して、
   しんさんは「シングルスレッド」とおっしゃっているように思えます。
   もしそうなら一般的にはそのような言い方はしませんので、混乱の元です。

(2) (1)の回答で、正しくはマルチスレッドだった場合ですが、
 「各メソッドをタイムアウトで終了させよう」が理由である
 ということであってますか?

(3) 30秒周期というのは、以下の意味であっていますか?
例)
A 9秒
B 11秒
C 5秒
D 4秒
待ち時間 1秒

A 8秒
B 10秒
C 6秒
D 4秒
待ち時間 2秒



(4) (2)が正しい場合、30秒で5つの処理があるわけですが、
  どういうルールでタイムアウトさせるのでしょう?
  例えば、A〜Dの所要時間の比率が2:4:2:2だとすると
  メソッドAは6秒、Bは12秒、Cは6秒、Dは6秒でタイムアウトさせるといったルールです。

(5) わからないのはどの部分でしょうか?
  2回目の投稿から読み取る限りでは、A〜Dのスレッドをタイムアウトさせる
  方法がわからないということであってますか?

<修正>
・質問の本題からはずれる内容は削除しました
・質問文の文面を推敲しました
</修正>
[ メッセージ編集済み 編集者: よねKEN 編集日時 2008-11-21 12:41 ]


[ メッセージ編集済み 編集者: よねKEN 編集日時 2008-11-21 13:52 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-11-21 19:19
こういうことか?

  1. A〜E 5つの手順がある。
  2. A, B, C, D, E の順で実行されなければならない。
  3. それぞれ、どれくらい時間がかかるかわからない。
  4. 全体を、30秒周期で実行したい。
  5. A が始まって30秒後に E が終わってなかった場合、前回の実行は中止する。
  6. しかし、確実に中止された後に A を始めたい。

という仕様があって、次のように考えた。

  • 中止しなければならないので、実行しているのとは別に、監視者が必要だ。
  • 監視者は、スレッドで実行しよう。
  • スレッドだから、A〜E は、別々に実行されてしまう。あるいは、中止するために別々に実行しなければならない
  • よって、A, B, C, D, E の順で実行できるよう、同期を取らなければならない。
  • どうやって?


 急いでいるのでしょうが、質問の背景がわかると、根本的な問題の所在がわかることがあります。そういう事例が、過去に多々あります。
 私は、回答することの方が多くなりましたが、質問したいこともあります。しかし、上記のように整理している最中に本質的な問題の所在に気づき、解決してしまうのです。上記のように考えての質問だとすると、問題は「同期を取ること」ではなく、別々に実行しなければならないと「考えたこと」です。
 A〜E の「メソッド」と書かれていますが、そのメソッドの中に書く処理も、多くは「メソッド」ではないでしょうか。そのことに気づけば、A〜E は別々のスレッドで実行する必要はなく、1つのスレッドで順次処理すればいいことがわかるでしょう。そうすると、同期の必要はなく、停止させることと、停止したときにリソースの回収漏れがないように気をつければよい、ということになります。

スキルアップ/キャリアアップ(JOB@IT)