- 1 名前:デフォルトの名無しさん [2010/05/16(日) 23:13:52 ]
- (#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
前スレ C#, C♯, C#相談室 Part58 pc12.2ch.net/test/read.cgi/tech/1269261310/ Visual C# 2008 Express Edition 日本語版 www.microsoft.com/japan/msdn/vstudio/express/vcsharp/ その他テンプレ>>1-5くらい
- 477 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 23:36:23 ]
- いきなり攻撃的な返答だな。あの日だったりしたのか?w
- 478 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 23:37:23 ]
- 記事は消えても画像は残ってるんだな
ttp://techbank.jp/Community/blogs/mymio/image_5233298A.png
- 479 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 01:01:27 ]
- マルチスレッドで教えてください。
ソケットプログラミングで、受信スレッドがキューにデータを溜めて、 メインスレッドは順次データを読み出して処理するというプログラムを書いています。 メインスレッドはキューにデータが無ければ受信するまで待機したいのですが、 一般的にどう実装するものでしょうか? とりあえず作った受信スレッドは、 Monitor.Enter(obj); 受信ループ キューに格納 Monitor.Exit(obj); Monitor.Enter(obj); ループEnd Monitor.Exit(obj); 受信の都度Exitしてメインスレッドに所有権を明け渡しています。 動作には問題なさそう?なんですけど、なんかスマートじゃないというか。。。
- 480 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 01:05:17 ]
- AutoResetEventつかう
- 481 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 01:12:17 ]
- lock (q)
ループ開始 }
- 482 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 01:13:28 ]
- ミスって書きこんじまった、なしなしな
- 483 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 01:16:31 ]
- BlockingQueue系統を使うのが定石だが、
.NET 4より前にはなかったな確か。 BlockingQueueとか実装はそこらに転がってそうだが。
- 484 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 01:19:51 ]
- >>479
.Net4が使えるなら BlockingCollection<T> 一択。 つかえないなら、↓こういう同期機能付きコレクションを使う。 www.codeproject.com/KB/recipes/boundedblockingqueue.aspx いずれにしても、そういうパターン(いわゆるProducer-Consumerパターン)では 同期機能はキューに持たせるのが一般的。で、Producer(この場合は受信スレッド)は データをキューに入れるだけ、Consumer(この場合はメインスレッド)はキューから 取得するだけにする。
- 485 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 07:08:32 ]
- MVPって最初の頃(2003年とかその頃)はいいなと思ってたんだが、わんくま同盟とか言い出した頃から
馴れ合い色が強くなってきて、なんていうか、このブログの主はMVPになる条件を満たしていないにも かかわらず、推薦制度を悪用してMVPになった感があるな。 こんなんがアドバイザとして高い金を取ってるかと思うとなんともいえない気持ちになる。 MVPを専属で引っ張ると100万/週ぐらい取らなかったか? 次回剥奪されると良いが。
- 486 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 07:29:51 ]
- >>485
> MVPを専属で引っ張ると100万/週ぐらい取らなかったか? そんなに価値あるのか? まあ、すごいのはいる。
- 487 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 07:47:51 ]
- nyaruruとかって本業何してんの?
- 488 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 07:52:15 ]
- そんなに取れません。n氏はGoogleに・・・。
- 489 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 08:00:19 ]
- GoogleだとWindows使えなくなるじゃん
大丈夫かな
- 490 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 08:30:10 ]
- CodeProjectでじゃんじゃん記事書きまくってる奴とか、凄いのがいる。
日本語サイトでMVPを名乗ってる奴の中には、こういうしょうもないのが時々いるから あんまり信用はしてないけど。 この人も結構メディアに露出しているけど、信用をなくすような行動取って大丈夫なのか? 「わかってませんでした。精進します」って言えば済んだことなのに。
- 491 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 09:32:56 ]
- >MVPを名乗ってる奴の中には
MVPは別に実力に関係ないしな まぁ色々特典もらえるのは正直うらやましい
- 492 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 13:33:26 ]
- どこがじゃ
- 493 名前:デフォルトの名無しさん [2010/06/14(月) 13:49:43 ]
- >>492
MVP乙
- 494 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 20:33:37 ]
- まあMVPに実力は関係ないな。
でも、一つのテーマでコミュニティ築く力は凄いと思わない。
- 495 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 21:05:26 ]
- うん。思わない。
- 496 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 21:47:57 ]
- 思わないんかいw
MVPって数結構多いよね。
- 497 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 21:50:59 ]
- 一時期、ものすごい増えて、今は多少減ったみたい。
- 498 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 22:26:37 ]
- 高い金取るのってエバンジェリストとかそういうのじゃないっけ?
コンサル
- 499 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 22:36:01 ]
- >>480-484
レスサンクスです。 Producer-Consumerパターンでぐぐったらズバリ出てきました。 こんな一般的な話だったなんて・・・orz
- 500 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 22:43:43 ]
- シングルスレッドではproducerとconsumerの同期がとれないってのが、
プログラムをマルチスレッド化する大きな動機の一つだもんな。
- 501 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 23:32:24 ]
- うん。
- 502 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 06:54:05 ]
- マルチスレッドといえば.Net4使ってるのに生のthreadやらthreadpoolやらを使ってる奴は何がしたいのかわからん
どれだけ俺様ライブラリを量産したいのかと小一時間(ry
- 503 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 12:20:19 ]
- Producer-Consumerパターンなら生だろうとBackgroundWorkerだろうと大して変わらんだろ
- 504 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:08:21 ]
- そういうことじゃないだろ。
- 505 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:18:56 ]
- ほう
- 506 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 21:49:26 ]
- >>502はプロデューサーコンシューマーに限った話はしてないよね。
- 507 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:04:20 ]
- そんなMSの俺様クラス作られても、いつサポートされなくなるか分からないしな。
- 508 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:36:19 ]
- しかしまぁ大手のマルチスレッド関連の記事は古いものばかりだな
忙しくなけりゃ俺が寄稿してあげたいぐらいだわ
- 509 名前:デフォルトの名無しさん [2010/06/15(火) 22:37:49 ]
- >>508
ブログにでも書け キーワードさえうまく配置してればそのうち広まるよ
- 510 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:38:57 ]
- 俺様ライブラリ(車輪の再発明)批判はいいとして、
それがどうして「生のthreadやらthreadpoolやらを使」うことがそれだって言うの? そっちの方が意味がわからんよ。
- 511 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 22:46:06 ]
- >>458
んーこのblogなんとなく見てたら気になるとこいっぱいあるな… でももうコメントもできんし。 っていうかだれかすでにコメントしてて消えちまったのかもしれんが。
- 512 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:52:40 ]
- >>504
.NET4触ってないからよくわからないんだが、Threading.threadは使わずにBackgroundWorker使えって事? それとも.NET4はもっと便利なのがあるってこと?
- 513 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 00:06:43 ]
- あるよ
- 514 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 00:34:11 ]
- >>512
Task クラスとか、Parallel クラスとかが増えた。
- 515 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 06:25:10 ]
- 目的が異なるものを比較する意味がわからん
- 516 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 06:41:52 ]
- え?w
- 517 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 09:26:18 ]
- は?
- 518 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 10:08:53 ]
- あ?w
- 519 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 10:10:59 ]
- お?
- 520 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 11:26:09 ]
- 並列用のパラレルAPIやParallel Linqで、GUIの非ブロック化処理を書いちゃうわけか。
それはそれでやばげだな。
- 521 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 12:30:20 ]
- 誰かいないのか?
それはそれでやばげだなって言ってんだろ!
- 522 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 14:07:14 ]
- ふざけんな!
俺がやばげだなつってるんだから反応しやがれ!
- 523 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 16:01:52 ]
- だあれもいない(´・ω・`)ショボーン
- 524 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:36:48 ]
- それはそれでやばげだが、それもありなんじゃないかなって、今はそう思えます。
- 525 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:29:38 ]
- .net4はキャンセルフレームワークが追加されたのがいいな
これでマルチスレッドを使う人がちゃんとキャンセル実装をするようになればいいが…
- 526 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:34:27 ]
- 耳毛、鼻毛を笑う。
- 527 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 21:27:25 ]
- しかし、そんなスレッドを酷使するような計算量のアプリって書いたことないなぁ。
あると欣喜雀躍する人がいるのは分かるがパンピーなプログラマでそんなもの要るの? ちゃんとプロファイリングしてれば、キャンセルなんて考える必要なんて無いのが経験則。 それとも皆、もしかして物理シミュレーションとか暗号鍵解読とかでもやってるのか?
- 528 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 21:32:56 ]
- スレッドを酷使するかどうかとキャンセルを考えるかどうかがなんで同列に並んでんの?
俺の経験からいけばそれらは関係がないんだけど。
- 529 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 21:37:11 ]
- いや、長時間じゃなくてもGUIアプリで計算しようとしたら別スレッドにするだろ。
しない?なら言う事は何も無いな。
- 530 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 21:38:45 ]
- C#でGUIアプリをつくったらそれを別スレッドで行わないことが困難だろう。
- 531 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 21:40:50 ]
- パラレルを活用するのはそれなりに限られてるけど、
タスク系統は普通に使うでしょ。
- 532 名前:デフォルトの名無しさん mailto:hage [2010/06/16(水) 21:45:24 ]
- >>527はどうしようもないバカ
スレッドのキャンセル書けないバカは一生マルチスレッドするな。
- 533 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 22:25:39 ]
- こうやってみるといかにマルチスレッドを使いこなしてないかわかるな
まぁちゃんとわかって仕事で使ってる人間なんてほんの一握りなわけだが
- 534 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 22:32:55 ]
- むしろよくわからないなら使わない方が良いとは思う。
大抵のビジネスアプリは使わんでも何の問題もない。
- 535 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 22:44:38 ]
- 俺はビジネスアプリ作ってるけどかなり多用してるな
とはいえあまり見ないのもたしか UIがフリーズしたり複数のタスクが同時に出来ないアプリが多い事多い事…
- 536 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 22:51:31 ]
- 仕事だと危険すぎてやらせる気にならんのだよね。
自分だけで作る部分ならいいんだが。
- 537 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 22:51:45 ]
- ぶっちゃけスレッドって難しいじゃん
サンプル程度のものなら簡単に理解できるし実装も簡単だけど いざちゃんとやろうと思ったら同期、同調、排他、例外処理、キャンセル、etc...と糞難しい 設計力も数段上の力が求められるしさー 業務系とかそれが出来ないからモーダルウィンドウに逃げてる人多いじゃんよ
- 538 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 23:00:14 ]
- 中級者御用達のクック本。
その中でも最も難易度の高い非同期項目みて”超初心者向けだな”とか思える人が集まらないと実務じゃ無理。
- 539 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 23:03:48 ]
- マルチスレッドは怖いです
- 540 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 23:04:36 ]
- はいはい
- 541 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 23:06:39 ]
- 実際のところ、UI止めたくないから裏でスレッド、くらいにしか使ってない。
- 542 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 23:11:53 ]
- GUIの裏で計算だとか通信だとかするならbackgroundworkerでよくね?
MSもこういう用途のために作ったんじゃないのかね 普通の受託開発屋なら通信部分って自前で書かない場合多いし
- 543 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 23:12:20 ]
- 低能だからね。
- 544 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 23:30:05 ]
- >>542
だってそれ使うと同調しにくいじゃん… スレッドも一本しか使わないし… それ以上にUIにベッタリな仕様だからビジネスロジック部分には不向き 複数のスレッドで別々の処理をやってある時点で非同期に集計してその後にまた別の処理を… なーんてことやると一気に難易度がググーーーンと上がっちゃいます!><
- 545 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:05:35 ]
- 出来るならやりゃいいと思うけど
適当に人あつめると出来ない人の方が多いからなあ。 低い方に合わせて作らんと死ぬよね
- 546 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:17:18 ]
- UI止めないのは操作感の改良だから、多重の並列処理はできないようにしてるが、
特に客から文句言われた事ないな。 計算が遅けりゃ十中八九はデータの持ち方とかに問題があって遅いから、遅いと 文句言われたら改良する。 文句言われなけい限り、保守とかが楽な方に意図的に流してる。 でもスレッドとか(あと信じられないことにコレクション)をヘルプのサンプル引き写し レベルで使ってるだけで、マニアックだとか難しくて他の人が保守出来ないから チーム作業ではやめてくれないかとか罵倒されて (´・ω・`)。。。(いくらなんでもあんたらが時代遅れだろ) とか思うが相手が大多数なので言えない。 これは俺の勤め先がブラックなんだよな、な?一般的じゃないよな?(マ板行け自分)
- 547 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:19:42 ]
- >>544
勝手に上がればーーーーか(´・ω・`)
- 548 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:23:53 ]
- >>544
そういう時はほかの方法でやるだろうよ。
- 549 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:40:39 ]
- 外資の俺が言うのも何だが未だに国内で組んでるエンジニアはレベルが低いな…
スレッドぐらい使いこなせよ…
- 550 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 00:43:35 ]
- >>549
>スレッドぐらい使いこなせよ レベルの低い会社に勤めてるのですねw
- 551 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:00:29 ]
- まあ自称分かってるやつが一番地雷なんだけどな。
- 552 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:08:08 ]
- 使いこなせてる俺はいつの間にやら上級PGだったようだ
おまえ等、俺に挨拶は?
- 553 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:08:35 ]
- ttp://blogs.msdn.com/b/hiroyuk/archive/2010/05/26/10015338.aspx
なんでvolatileなのに問題が発生するのか説明してみて。
- 554 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:15:18 ]
- >>553
説明もなにも二つのスレッドが協調すべきなのにその操作をいれてないからだろ そのブログじゃ同時に実行される云々いってるがスケジューラの指定が無い以上どっちが優先されるのかはプロセッサ任せ つーかロックすらかけてない互いの状態弄って何がしたいのかわけわからん volatileは全く関係ねぇよ ふー、やっぱ俺って天才だわ 上級PGなめんなよ!
- 555 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:29:58 ]
- >>554
何を言ってるんだお前は…
- 556 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:35:27 ]
- volatileには順序保障の役割がある。
・volatile読み込みより前の書き込みは必ず先に実行される ・volatile書き込みより後の読み込みは必ず後に実行される にも関わらず>>553ではすべての読み書きがvolatileなのに順序問題が起こる。 これはなぜか説明してみろという話。
- 557 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:42:14 ]
- いや、
・volatile書き込みより前の書き込みは必ず先に実行される ・volatile読み込みより後の読み込みは必ず後に実行される かな
- 558 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:58:43 ]
- だからレジスタ依存=プロセッサに依存するつってんだろー
それを阻止する為に〜やりましょうとかずれてるわけで ちゃんとやるならロックや適切なスケジューラを指定するのが常なんだよ! 上級PGなめんなよ!
- 559 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 02:06:04 ]
- 上級な土方
- 560 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 02:09:16 ]
- まったく何でかが知りたいならO-o-Oでググれや
上級PGなめんな!
- 561 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 02:16:05 ]
- え、volatileに同期処理なんてあるの?初耳だわ。
- 562 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 02:22:54 ]
- 同期じゃねぇよ
ただのコンパイラ最適化防止の為じゃ そして>>553の記事は最適化は防げてもプロセッサの最適化(OoOのね)は防げないから任意でThread.MemoryBarrier()挟んでメモリバリアしろよタコ助共つーこと 上級PGなめんなよ! つーかスレッド使う予備知識の基礎中の基礎だろ!
- 563 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 03:30:13 ]
- >>546
俺もいい言葉を言われたことがあるので伝えておくよ。 「ジェネリクスは信用してないから禁止」
- 564 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 03:57:44 ]
- >>561
C++のvolatileと混同してない?C#のにはあるよ。 ただOoOに対しては有効じゃないのかなぁ。
- 565 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 04:49:42 ]
- 初鼻だわ。
- 566 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 05:59:33 ]
- あのな、スレッド関係で、順序保障の機能ってのはOoOの順序問題とかの解決に使う。
当然、C#のvolatileは順序を保証するために使える。 ではなんで>>553では全部volatileなのに順序問題が発生するのか。
- 567 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 06:14:20 ]
- 参考
ttp://msdn.microsoft.com/ja-jp/magazine/cc546569.aspx#id0030022
- 568 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 06:32:28 ]
- つまり>>551
- 569 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 06:42:49 ]
- 参考
ttps://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx#S3 この辺が詳しいな。
- 570 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 06:56:55 ]
- >>563
デリゲート禁止ってのもあった・・・
- 571 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 08:55:56 ]
- いつからvolatileがOoOの順序保障が行われるようになったのやら
ほんとレベル低いな
- 572 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 10:30:22 ]
- >>563
医者が扱う薬の話かよ
- 573 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 10:51:05 ]
- /ufcpp.net/study/csharp/sp_thread.html
volatileって何だろうと思って凄腕の人の解釈見たらコンパイラの最適化防止ってかいてあるお ゆとりPGをなめんなおっおっ( ^ω^)
- 574 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 13:38:23 ]
- >>573
最適化でその変数がなかったことにされるのを防ぐだけ
- 575 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 13:41:28 ]
- 何のために?
- 576 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 13:43:09 ]
- グローバル変数的に使うために用意した変数が、同ファイル中で手をくわえられてないから最適化で削除されちゃう
とかを防ぐためじゃなかったっけ。
- 577 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 13:43:56 ]
- コンパイラが不要だと思っても、実は他のスレッドが
必要としているかもしれないから。
|

|