[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 06/04 17:21 / Filesize : 278 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

マルチスレッドプログラミング相談室 その4



1 名前:デフォルトの名無しさん mailto:sage [2005/11/03(木) 11:23:05 ]
マルチスレッドプログラミングについて語るスレ。
OS・言語・環境は問わないが、それゆえ明記すべし。

その1 pc3.2ch.net/test/read.cgi/tech/997345868/
その2 pc5.2ch.net/test/read.cgi/tech/1037636153/
その3 pc8.2ch.net/test/read.cgi/tech/1098268137/

263 名前:256 mailto:sage [2006/01/30(月) 21:32:25 ]
>262
その後は結局どうなりました?
ひょっとしてマルチスレッドのデバッグは、VC++6.0でできないっていうのが
「仕様」なんでしょうか?

264 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 21:52:07 ]
Windowsを2000にするか、VisualStudioをバージョンアップしませう

265 名前:256 mailto:sage [2006/01/30(月) 22:01:27 ]
>264
Windows2000でもなりました。
VisualStudioをバージョンアップですか.... 高かったんですよね。

266 名前:デフォルトの名無しさん mailto:sage [2006/01/30(月) 22:26:40 ]
>>256

私も Windows2000 から XP にアップグレードしてから似たような
現象が発生するようになりました。

VC++6.0 と BCB5 でそうなっていて、どちらもマルチスレッド
アプリケーションでなくても発生します。

なんか Window メッセージの送受信の応答がシステム全体でとてつもなく
遅くなる感じですね。バックグラウンドで音楽とか流していても、音楽は
普通に流れますが、ウィンドウの切り替えとかがものすごく遅くなります。
完全なフリーズじゃないだけに、諦めて電源を落とそうにも、落とすタイ
ミングに困ってしまうというか。

ttp://www.wg7.com/w2ktips/#CTFMON

これと似たような症状なんですが、私は試していません。言語バーが
使えなくなるのも困るので。

結構頻繁に起こるので辛いのですが、起こらないときは起こらないので、
そういうものだと思って諦めています。

267 名前:225 mailto:sage [2006/01/30(月) 22:43:46 ]
_beginthread(ex) の説明のところに、CreateThread だとメモリリークして
しまう C ランタイム関数の一覧でも書いてあれば良いんですけどね。

ttp://support.microsoft.com/?scid=kb%3Ben-us%3B104641&x=11&y=5

には malloc とか fopen でもメモリリークするようなことが書かれてるけど、
実際に試してみると、VC6/BCB5 どちらの場合もメモリリークしてるようには
思えないです。

ここに書かれてないものでは、rand() を使うとメモリリークしますね。
今回の呼び出しの結果が前回の呼び出しに依存するようなタイプの関数は
全滅なんでしょうね。

268 名前:256 [2006/01/30(月) 22:55:37 ]
>266
確かに今まで他のプログラムを組んでいるときにそういうことはありました。
しかし、今回はそれとはちょっと違うように思えるのです。
一度固まると、少なくとも20分ぐらいは待ってみたのですが復帰しませんでした。
しかも、ほぼ毎回起こります。

上のソースに何か問題点があるのでしょうか?
ウィンドウメッセージに応じて処理をするスレッド(最初に起動されたときのもの)
別に他の計算をするスレッドを別に作っています。
競合が起こっているのかと思い、上のような簡単な簡単なソースを書いてみたのですが
あれでも必ずといっていいほど起こります。
ちなみにWindowsMeでも起こりました。家のPC全滅です..

269 名前:266 mailto:sage [2006/01/31(火) 00:34:55 ]
最初は自分が書いたプログラムに原因があると思ってたのですが、
Web 上にある他人が書いたもののいくつかを自分の環境でコンパイル・実行
してもそうなるので、環境によるものだと思って諦めることにしました。

Windows2000 では問題なかったので、256 さんと私とでは状況が
少し異なりますね。マルチスレッドアプリケーションでなくても
発生しますし。お役に立てなくてすみません。

270 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 01:33:38 ]
オレもよくなる。ステップ実行しているとなんでもないところで固まってCtrl+Alt+Delをやって再起動とかやるが
まったく動かず、次にAlt+Tabで悪あがき。選択した窓から順に固まる。
最後電源長押し、するとmsdev.exeを終了しています、かなんかがでて、msdev.exeが終了するとほかもサクサク終わる。
もちろんまったく終わらないでそのまま固まることもある。
DLLで提供される関数をステップオーバーしたときに出るとか、なんか最初はそんなことを思っていたけど
そうでもないらしい。


271 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 09:31:42 ]
Windowsのスケジューラ糞馬鹿だから
タスクマネージャでMSDEV.EXEのプライオリティ上げろ。




272 名前:256 mailto:sage [2006/01/31(火) 21:11:22 ]
VisualStudio .NET 2003を入れてデバッグしてみたところ、簡単なものは
ほとんど固まらなくなりましたが(とはいえ、ごくたまに固まります)
開発しているプログラムは依然として固まるようです。
いまいちすっきりしないのですが、あまりこの問題にかまっている時間的
余裕も無いのでデバッグ時のみシングルスレッドで動くようにして
場当たり的な解決をすることにしました。
幸運にもあまり修正せずにすむに済みました。
依然として自分のプログラムに問題があるのかという不安はのこりますが...
266さんをはじめ、皆様、様々な情報提供ありがとうございます。
よくあることのようなので、少し安心しました。(していいのか!?)

273 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 21:27:49 ]
>263
imeだか関係の問題だったはず。
ttp://ww1.enjoy.ne.jp/~turikiti/knowledge/program/oboegaki.htm
の、マルチスレッドの注意点の項を参考にしてみては?
私は効果なかったんですが・・・

274 名前:デフォルトの名無しさん mailto:sage [2006/02/01(水) 01:56:10 ]
257のコードで何にも問題は出なかったぞ。
F5押しっぱなしでも固まるどころか快調そのもの。
Dual Pentium III 1GHz, NT4.0 VC++ 6.0+Sp5


275 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 16:12:33 ]
>>256
デバッグモードでなぜかおかしくなるというWin個体は確かにある。
どうしようもない。マシン変えろ

276 名前:sage [2006/02/04(土) 00:23:14 ]
VB6.0でActiveX DLLを使用し、マルチスレッドを実現できるという噂を聞いたのですが
本当ですか?

でもイメージが掴めない・・・
VBでActiveXコンポーネント「A」を呼び出し

A作成→A何らかの処理
      ↓
VBの処理←A処理終了

VB次の処理

って感じでマルチスレッドとは違う気がするんですが・・

もし本当であれば、どなたか参考になるサイトをご教授頂けませんでしょうか


277 名前:デフォルトの名無しさん [2006/02/04(土) 01:43:21 ]
search.yahoo.co.jp/search?p=Visual+Basic+ActiveX+%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89&ei=UTF-8&fr=top&fl=0&x=wrt&meta=vc%3D

278 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 08:38:15 ]
>>276
DLLの中はC++で書けばなんでもやり放題なんじゃね?
DLLの中でクリートスレッド

279 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 09:02:03 ]
>>278
クリートスレッドってなに?

280 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 09:39:29 ]
CreateとDeleteの合成語だろ
スレッドを作ったら自分で閉じろってことだ

281 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 12:14:10 ]
>>276
ActiveX のコンポーネントとして作成した DLL/EXE が
スレッドセーフだ、ってだけじゃね?



282 名前:デフォルトの名無しさん mailto:sage [2006/02/04(土) 12:20:51 ]
何をしたいのかしらんが
COMのスレッドは楽しいぞ


283 名前:デフォルトの名無しさん mailto:sage [2006/02/06(月) 19:46:27 ]
CreateThreadをクリートスレッドって読んだんだろ。
馬鹿みたいだが。

284 名前:デフォルトの名無しさん [2006/02/11(土) 07:40:21 ]
もう二日も考え込んでるんですが解決しないんで質問です。(うう、マジで目と頭が痛い…。)
基本的に生産者消費者問題なんですが
Aが物を作るとBに渡し、Bが物を作るとCに渡し、Cが物を作るとDに渡す、というように
複数の生産者/消費者のベルトコンベヤーでの流れ作業を想定しています。
で以下のように組んでみたんですが、
今度はB自身が消費したことをB自身に知らせなくてはならなくてこんがらがってきました。

public class Main
{
public static void main(String args[]) {
ConveyerBelt stationAB = new ConveyerBelt();
ConveyerBelt stationBC = new ConveyerBelt();
ConveyerBelt stationCD = new ConveyerBelt();

Worker producerA = new Worker(stationAB);
Widget consumerB = new Widget(stationAB);
Worker producerB = new Worker(stationBC);
Widget consumerC = new Widget(stationBC);
Worker producerC = new Worker(stationCD);
Widget consumerD = new Widget(stationCD);

producerA.start();
consumerB.start();
producerB.start();
consumerC.start();
producerC.start();
consumerD.start();
}
}
ConveyerBelt()バッファーが三つというのは正しいと思うんですけど
スレッドはABCDの四つだけ作ればいいんでしょうか?どなたかご教授下さい。

285 名前:284 [2006/02/11(土) 07:43:18 ]
ちなみにセマフォは「なし」の方向でお願いします。

286 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 07:47:19 ]
日本語で質問してください

287 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 08:44:23 ]
>>284
Chain Of Responsibility パターンはもう検討済みなの?

288 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 10:21:28 ]
>>284
4つじゃないとダメなわけもないし、好きに作ればいい

289 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 12:09:10 ]
各々理由を書いてね。

> 今度はB自身が消費したことをB自身に知らせなくては
> ならなくて

> ちなみにセマフォは「なし」の方向でお願いします。

290 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 18:57:50 ]
>>289
正確厨、規格厨、口先厨の予感。現状提示されている情報から
回答が思いつかなければ、その問題に対する類似性や経験則
など思い当たるところが無いっつーことだろ。

全部の情報が分からないとコミュニケーションできないような
応用力無しやつは黙ってろ

291 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 19:56:02 ]
>>9
Double Checked Lockingに追加

Scott Meyers & Andrei Alexandrescu
"C++ and The Perils of Double-Checked Locking (II)"
erdani.org/publications/DDJ_Jul_Aug_2004_revised.pdf

付録に"volatile: Brief History"あり。

Douglas C. Schmidt & Tim Harrison
"Double-Checked Locking
An Optimization Pattern for Efficiently Initializing and Accessing Thread-safe Objects"
www.cs.wustl.edu/~schmidt/PDF/DC-Locking.pdf



292 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 21:48:09 ]
>>290
エスパー以外は黙れと。

293 名前:291 mailto:sage [2006/02/11(土) 22:33:21 ]
せっかく流れ切ったのに…

294 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 22:58:43 ]
>>290
やんわりと、「設計がおかしいんじゃないか?」と言われてるんだよ。

まあ、もうまともな回答は期待できないだろうからどうでもいい話だが。

295 名前:284 [2006/02/12(日) 01:45:30 ]
ご迷惑をお掛けしております。m(__)m

>>287
そんな概念があったんですね。というくらいなので検討済みではないです。
検索してみていくつかサイトを見つけたのでもう少し読んでみます。
分からなければまた質問します。それと
if (Thread.currentThread() == "Thread[Thread-0,5,main]")
System.out.println("I am the Worker A.");
のようなチェックを入れたいんですが、そんな比較はできないみたいです。
左辺値はどんな感じにすればいいんでしょうか?
これができれば、一つ一つ鎖をつなげていける気がするんですが。

>>288
逆を言うと「4つでもできる」ということですか?

>>289
現状を話しますと
Aから渡された物をB自身が処理(消費)してもないのに
(いや、時にはAから物を渡されてもないのに)
Bは勝手に生産を始めてしまいます。
ですから現在はA-B間、B-C間、C-D間のみで同期がされてます。
それと、やっぱりセマフォアは「あり」でもいいです。

296 名前:デフォルトの名無しさん [2006/02/12(日) 05:05:21 ]
ここでは綺麗でも汚くても叩かれますYOW

297 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 05:06:03 ]
誤爆した スマン...

298 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 07:55:32 ]
>>294
その「やんわりと」の部分が他人をイラつかせるんだよ。現実でも
相当にいやみな人間だろう

299 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 08:00:36 ]
>>292
そこまで行間が読めないようだと生きるのに苦労してないか?

300 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 08:14:33 ]
>>299
292は皮肉で言っただけだから、普段は別段苦労はしてないな。

301 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 11:03:26 ]
この業界、日本語の喋れない奴ばかりだからエスパー能力は必須だよね
低級エスパーだから日々苦労してるよ



302 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 11:38:10 ]
エスパーってほどか? そうじゃなくてだな、俺の言いたいことはだ、

類似の問題を経験していたら回答が思い浮かぶだろ。素直に
それ書いてやりゃいいんだ。お前らだって今まで誰かに教えて
もらったり助けてもらったことあるだろうに。

それを忘れてくだらねー皮肉や、重箱の隅をつつくようなまぜっかえしを
親切を装ってやるようないやらしいことすんなよ。ナサケナス

303 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 11:48:06 ]
別に2chで教えようと混ぜっ返そうとどっちでも構わんと思うのだけど。
まぁ、ヒントだけ貰った方がいい場合と答丸ごと貰った方がいい場合があるのでどっちがいいとも言えないしね。
漏れはここのスレでは教えることも教わることも少ないけど、この板全体では教わることより教えることのほうが多くなるようにしている積もりだがね。
混ぜっ返したり揶揄したり誘導したりも多いけどw

304 名前:284 [2006/02/12(日) 12:23:35 ]
で、あのー・・・

305 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 12:28:35 ]
生産者消費者問題くらい、標準的なテキスト読んで自分でやれ

306 名前:284 [2006/02/12(日) 12:37:41 ]
テキストには生産者消費者が一対一の例しか載ってないんですよ。
こんなに真剣に質問してるのになんでこんな目に遭うんだ…
世の中絶対におかしい。

307 名前:284 [2006/02/12(日) 12:38:49 ]
丸投げでもなく真剣に書いてるのに…もう馬鹿馬鹿しくて泣けてきた…もういいです。

308 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 12:57:25 ]
なんで、consumerBとproducerBが別オブジェクトなわけ?
ふつうは入口と出口のある1つのオブジェクトとして考えるでそ?

309 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 13:03:48 ]
お前らかわいそうだから教えてやれ。おれは良く分からないのでパス。ごめん

310 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 13:05:39 ]
レベル1エスパーだけど、

>>284
>> ConveyerBelt()バッファーが三つというのは正しいと思うんですけど
>> スレッドはABCDの四つだけ作ればいいんでしょうか?どなたかご教授下さい。

唯一の正解があると思ってるのか?好きにつくれよ




311 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 13:06:34 ]
>>306
質問する相手を間違えているだけだろう?
世の中がおかしいのではないと思う。



312 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 13:11:45 ]
普通はレスの付き方を見て、質問の仕方が悪いと思うんだけどね

313 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 13:17:51 ]
>>284
漏れも>308の言うとおりだと思う。
つか、めっちゃ単純な問題だと思ってたから
まさかconsumerBとproducerBが別だと思ってなかったw
あらためてソース見直してみてビックリした。

> ですから現在はA-B間、B-C間、C-D間のみで同期がされてます。 
それでいいんじゃないの?他に同期取らなきゃいけないの?セマフォもいらんと思うけど。

314 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 13:30:26 ]
>>313
> 他に同期取らなきゃいけないの?

知りもしないのに、

> セマフォもいらんと思うけど。

云うな(w

315 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 13:43:39 ]
うん、ごめん。よくわかってなかったわ。
最初ConveyerBeltの作り疑ってたもんな。
危うく恥かくとこだった。

316 名前:289 mailto:sage [2006/02/12(日) 13:51:11 ]
俺も、>>308 に同意。
だから、
> 今度はB自身が消費したことをB自身に知らせなくては
> ならなくて
は、何か勘違いしてんじゃないかと思って、>>289 を書
いてる。はじめのうちは、(俺も含めて) 結構とんでもな
い勘違いをすることがあるから、別にそれがおかしいとは
思わないけど、何を考えてるかわからんと情報を提供して
あげることもできないから。

あと、>>306-307 が本人かどうか知らんけど、「真剣に
質問」したのにまともな答えが返ってこないと言うが、
匿名掲示板に質問すること自体が既に「真剣に質問」して
いるとは言えない。回答する方は、あくまでも知ったかし
たいか暇つぶしか昔の恩を返したいかなんだから、「真剣
に向き合え」とか言われたら、「なんちゃ、それ。」で無
視されるのがオチ。

この板の人は基本的に親切だから、嘘は余り書いてない。
>>290 みたいな雑音を飛ばしてよく読めば、きちんと
ヒントは書かれているから、自分でググルなりすればいい。

そのものズバリの答えが欲しいなら、本を買うなり学校に
通え。

317 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 14:14:03 ]
実質何も答えていないのを繰り返してるだけじゃね?

318 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 14:19:02 ]
答える側が堂々巡りするケースのほとんどは、
質問がいい加減なことに起因する。

319 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 15:40:49 ]


320 名前:289 mailto:sage [2006/02/12(日) 15:47:02 ]
>>317
まあ、確かにそのものズバリの回答は無いけど、>>287,
>>308 あたりは、充分ヒントになりうると思うが。

個人的見解として、このヒントを基に自分で勉強するぐら
いでないとマルチスレッドのプログラミングはできないと
思う。

321 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 19:56:19 ]
変なところで改行するなよ
醜い



322 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 13:30:16 ]
久し振りに来てみたが、相変わらず、このスレは知ったか馬鹿が多いな。
とりあえず>>288>>310>>311あたりの馬鹿どもはこのスレいても邪魔だから消えろ。
もう>>284はいないと思うが俺なら

public class Main
{
public static void main(String args[]) {
ConveyerBelt NULL = new ConveyerBelt();
ConveyerBelt stationAB = new ConveyerBelt();
ConveyerBelt stationBC = new ConveyerBelt();
ConveyerBelt stationCD = new ConveyerBelt();

Worker workerA = new Worker(NULL, stationAB);
Worker workerB = new Worker(stationAB, stationBC);
Worker workerC = new Worker(stationBC, stationCD);
Worker workerD = new Worker(stationCD, NULL);

workerA.start();
workerB.start();
workerC.start();
workerD.start();
}
}

とやる。ConveyerBeltクラスん中ではinとoutの二つのbufferを作ってやれ。

323 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 23:01:34 ]
>>322
> ConveyerBelt NULL = new ConveyerBelt();
> ConveyerBeltクラスん中ではinとoutの二つのbufferを作ってやれ。

馬鹿ジャネーの。

324 名前:デフォルトの名無しさん [2006/02/15(水) 00:03:38 ]
>>323
自分の事を良く解ってるじゃないかw

325 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 00:15:31 ]
俺も
> ConveyerBeltクラスん中ではinとoutの二つのbufferを作ってやれ。
は意味わかんねえ。ConveyerBeltなのに何か処理でもするの?

326 名前:釣りだったのかも...。 mailto:sage [2006/02/15(水) 01:13:37 ]
>>325
多分、in と out の buffer を取り持つ ConveyerBeltSub
を作るんだよ。

もちろん、その中には buffer が二ついるから、更に
ConveyerBeltSubSub を作って...。(w

# >>322 = >>324 は、基礎から勉強しなおした方がいいぞ。

327 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 01:48:57 ]
buffer1個でいいでしょ

328 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 03:43:24 ]
どうでもいいけどなんで4つとも別スレッドで独立して動かす必要がるわけ?
全体としてどんなことをしたいのか今一想像がつかん。


329 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 15:13:36 ]
あらあら、もう一人馬鹿↑が来た

お前、流れ作業って言葉聞いたことあるか?

330 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 15:20:00 ]
>Aが物を作るとBに渡し、Bが物を作るとCに渡し、Cが物を作るとDに渡す、というように
>複数の生産者/消費者のベルトコンベヤーでの流れ作業を想定しています。

>>327
お前の読解力は小学生以下か?
buffer一つで出来るもんならやってみろ、馬鹿。
出来ないんならもう来るなよ、ここではお前は邪魔なだけだから。

331 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 16:06:16 ]
パイプ1個あたりバッファ1個の意味で言った
言葉足らずというか全然意味が通らないねスマソ



332 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 18:06:14 ]
Java よく知らんのだが、これは要するに
4つのスレッドを3つのキューで繋ぎたい、って「だけ」の話?

333 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 18:34:54 ]
YES

334 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 21:04:57 ]
>>329
いやそうじゃなくてどんな処理で4スレッドの流れ作業なんて必要になるのか
想像がつかんのだ。


335 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 23:29:55 ]
マルチ商法ですた

336 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 23:46:26 ]
そんなもの想像つかなくていい。
質問に答えりゃそれでいいんだ


337 名前:デフォルトの名無しさん mailto:sage [2006/02/16(木) 01:22:58 ]
関連する複数のタスクを回す場合は、個別に分けずに
スレッドプールでまとめてやるのがいいんじゃないの?

やろうと思えばExecuterServiceでも似たようなのできるけど。

□ タスク側
1. 自身のタスク終わったら次のCallableをsubmit()する。
2. 途中のタスクの戻り値としては次のFutureを返す。
3. 最後のタスクは流れ作業全体の値を返す

□ 呼び出し側
1. ExecuterServiceに最初のCallableをsubmit()する。
2. Futureのget()がFutureを返した場合は置き換えてループする。
3. Future以外が返って来たら全タスク完了。

ただ、Callable中で次のタスクをsubmit()すると、バウンド形式なQueueで
最大スレッド数に制限が付いてるとデッドロックの可能性があると思われ。
これはExecuterServiceを流れ作業の数だけ作れば回避できそうかな?

338 名前:デフォルトの名無しさん mailto:sage [2006/02/16(木) 01:58:33 ]
>>333
d楠。
たったそれだけの事で、こんだけ盛り上がれるなんて
なんの病気なんだ…

>>334
それを実現する手段を知るためじゃね?演習問題みたいな。

339 名前:デフォルトの名無しさん mailto:sage [2006/02/16(木) 09:57:05 ]
>>332
たぶんそう。それなのにbuffer二つとか言い出す奴もいて…
そもそも質問があれだし。

340 名前:デフォルトの名無しさん mailto:sage [2006/02/17(金) 12:51:20 ]
みんなコロンブスの卵って知ってる?

「コロンブスの卵」は、「誰にできることでも、最初にするのが難しい」という意味で使われる。
1492年にアメリカ大陸(西インド諸島のサンサルバドル島といわれている)を発見したことで有名なコロンブス。
その功績を祝う晩餐会で、ある男が言った「西へ西へと航海して陸地に出会っただけではないか」と言った皮肉に
対して、コロンブスは卵を取り上げ、「この卵を卓の上に立ててごらんなさい」と言った
だれも立てられないのを確認するとコロンブスは、卵のおしり(気室のある鈍端部と思われる)を食卓でコツンとた
たいて立てて言った。「人がした後では何事も簡単です」

>>332
で、その「だけ」の話を理解できなかったのはどこの馬鹿だったっけ?( ´,_ゝ`)プッ

341 名前:デフォルトの名無しさん mailto:sage [2006/02/17(金) 13:03:35 ]
なにこの馬鹿…



342 名前:デフォルトの名無しさん mailto:sage [2006/02/17(金) 13:13:45 ]
ああ!この↑馬鹿か、その「だけ」の話を理解できなかったのは!

343 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 00:44:40 ]
文章から頭の悪さが滲み出ている。

344 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 12:29:01 ]
↑「だけ」の話を理解できなかったのが相当悔しかったんだね。( ´,_ゝ`)プッ

345 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 16:24:11 ]
なんか雰囲気が悪くなってきたな。
元に戻そうぜ。

これって
Aの生産量≦Bの生産量≦Cの生産量
だよね?でないとCとかDとかが結構待たされるんじゃないのかなーと。

346 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 21:50:29 ]
↑何もわかってない奴の典型だな!

347 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 22:38:57 ]
と、必死。


348 名前:デフォルトの名無しさん mailto:sage [2006/02/18(土) 23:57:11 ]
荒している馬鹿は、>>322の阿呆レスした奴?


349 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 03:12:23 ]
ここにいるのは馬鹿ばっかだな

350 名前:デフォルトの名無しさん mailto:sage [2006/02/19(日) 03:15:52 ]
>>345
ふいんき(←なぜか変換できない)戻そうと必死なのは分かるが
流れ作業なので

Aの生産量=Bの生産量=Cの生産量

351 名前:332=338 mailto:sage [2006/02/19(日) 03:40:54 ]
荒らしの相手はやめようや。

>>334
今思い出したが、以前C++ on Windowsで似たような構成にしたことあったわ。
その時は通信スレッド×20→データベーススレッド×2→印刷スレッド×1だったが
キューとミューテックス(各1)で小さいクラス作ったような覚えが。



352 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 04:08:06 ]
>>350
なんで?
極端な話、Aが2つの整数を流してBがそのxorを流したら半分じゃん。

まぁ別にそんなのはどうでも良くて、
単に4つスレッドを作らなくちゃいけない状況を想像して見たかっただけ。
邪魔してすまん。

353 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 21:16:12 ]
10メガくらいのメモリをコピー(memcpyとか)するときに、
領域を分割してマルチスレッドにしたら速度上がる?

マルチコアとかマルチスレッディングなら上がるかな?

354 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 22:57:06 ]
memcpy()だったら変わらない希ガス
fread()とかで、あるスレッドでHDDからデータ読み込み中に、
前回読み込んだデータ解析を行うとかだったらスループットはあがると思う。

355 名前:デフォルトの名無しさん mailto:sage [2006/02/21(火) 11:30:13 ]
>>353
CPUが速ければ、
キャッシュを含めたバスシステムがボトルネックになるまでは上がる。
システム依存だから自分のターゲットにしているヤツで試してみて。

356 名前:353 mailto:sage [2006/02/22(水) 08:10:39 ]
ありがとう。
でも本当はそんなメモリコピーしない設計にするのがいいんだよなorz

357 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 21:31:45 ]
じゃあ、なんでそんな設計にならざるを得なかったのか、説明してみればいいじゃない。
メモリ参照だけで済むアルゴリズムを誰かが教えてくれるんじゃない?

358 名前:デフォルトの名無しさん mailto:sage [2006/02/22(水) 22:06:40 ]
writeで例外起こすようにしてcopy-on-writeだ

359 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 02:58:53 ]
設計したのは赤の他人。
ワタシはメンテ担当(涙)

360 名前:デフォルトの名無しさん mailto:sage [2006/02/23(木) 17:25:34 ]
>>359
その赤の他人よりも上手に設計できたとおもう?

361 名前:デフォルトの名無しさん mailto:sage [2006/02/24(金) 00:01:14 ]
何このウスラ馬鹿な突っ込み



362 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 01:05:49 ]
>>359
設計思想もわからん個所を、色々チューニングしようとしてるの?

悪いことは言わないから「やめとき」。

363 名前:デフォルトの名無しさん mailto:sage [2006/02/26(日) 01:08:10 ]
仕事じゃしょうがないよな。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<278KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef