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 くらい
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 ] コンパイラが不要だと思っても、実は他のスレッドが 必要としているかもしれないから。
578 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 13:44:31 ] volatileは順序保障するとか言ってた奴出てこいw
579 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 13:46:14 ] あぁ、スレッドであれこれするときに読むんだけど、おまえそのスレッドでその変数変更してねえのになんで読むんだよ それいらねえだろってコンパイラが言ったら、それは別のスレッドが書き変えてるかもしれないの!って注意してやるんだったか
580 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 13:52:45 ] C言語のvolatileが想定してたのはSignalなどのCPU割り込み処理で、 スレッドのことは考えてなかった。 よくvolatileをスレッドで使うなというのはこのため。 C#やJavaのようなはじめからスレッドを想定してる言語では意味を拡張していて、 スレッドに対して使えるようになっている。 >>553 の他の記事を見たが他のはエラーが起きたときのダイアログやメッセージを イメージでアップしているが、この記事にはない。 おそらく手元の環境でエラーが起きなくて脳内で書いてるんじゃないのかな。 誰かこのプログラムでAssertが起きた人いる?
581 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 15:29:45 ] 並列化で思い出したが、SIMD対応ってもうやる気無いのかね? 昔はJITの利点の一つとして喧伝してたもんだったが
582 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 16:05:48 ] 環境に応じてスカラでXMMレジスタを使ってるらしい。 ベクトル化はMono.Simdのようなやり方しかないのだろうか。
583 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 17:01:13 ] Matrixとか折角あるのに対応してないのかね つーかアレDirectX由来だっけ?
584 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 17:06:53 ] もともとMatrixはJpegやMpegの展開のために用意されたんじゃなかったっけ? これからはマルチメディアの時代だとか言って。 今はビデオの展開はGPUの仕事になっちゃってるからCPUのMatrixはあんまり使ってないような。
585 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 17:27:28 ] Matrixの主な用途はTransformだと思ってた俺
586 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 17:53:49 ] >>585 君が正しい
587 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 19:44:11 ] var hoge = new hogehoge() 「新人がわかんないだろ、意地悪すんなよ」って言われた
588 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 19:56:13 ] 新人いじめかよ 最低だな
589 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:02:15 ] volatileはメモリの読み書きを最適化して消さないだけ それ以外は特に何も保証しない
590 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:07:59 ] >>578 ここはでたらめ言うだらけだな。 ttp://msdn.microsoft.com/ja-jp/library/aa645755.aspx ttp://msdn.microsoft.com/ja-jp/library/aa691105.aspx ttp://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx#S3 >>574 ttp://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx#S5 この辺読みゃ分かるが、よく誤解されてるように読み込みそのものが削除されるようなことは普通はない。
591 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:08:57 ] ぜんぜん前の書き込みを読まない奴だな。それはCの話だ。
592 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:11:32 ] >>589 そろそろ痛いから言語仕様でも読んでみな。 >>590 の最初のリンクだけでも十分だ。 >>580 >>553 のソースでしっかりAsser起こる。 一瞬なんで?って思ったが、まあよく考えてみれば確かに起こってもおかしくはないのかな…って感じ。
593 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:16:33 ] なんかごっちゃになっている奴がいるようだけど、volatile保証するが読み書きの順序と、 複数のスレッドが変数にアクセスする順序は別の問題だから。
594 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:19:05 ] >>593 未だに>>553 の意味わかってないだろ。
595 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:20:35 ] いや、微妙だな、わかっていっているようにも読める。
596 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:22:20 ] C#の話だったのか
597 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:23:49 ] スレタイ読んでなかったのか
598 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:24:10 ] >>590 遠まわしな説明でよく解らんな。 メモリバリアの機能を含んでいるどうかだけ書けば1行ですむのに。
599 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:28:07 ] というか、>>553 の例はコンパイラが無意味に見える命令を削除しているだけじゃないのか?
600 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:28:59 ] はい?
601 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:30:50 ] volatileは最適化をなくし削除しなくなるんじゃなかったのかよw
602 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:32:08 ] こんな風に分かってるつもりのやつがでたらめなことばっかり言うから、 危なくて使えないんだよ。
603 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:36:47 ] >>598 >メモリバリアの機能を含んでいるどうかだけ書けば1行ですむのに。 メモリバリアの機能を含んでるならなんで>>553 はAssert起こって、 明示的にメモリバリア命令入れたら起こらなくなるの? って思うわな普通。 メモリバリアって言っても一言で言えるほど単純な話じゃない。
604 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:42:36 ] volatile は確かに最適化を抑止するんだが、それは一つのスレッド内で変数の参照順を 変更するようなものに限られるんだよ。
605 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 20:58:58 ] 10.4.3 Volatile フィールド 他のスレッドによる volatile 書き込みは、それらが実行された順にすべてのスレッドで行われます。
606 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 21:38:57 ] 趣味でしかプログラミングをしない俺にはサッパリだ。
607 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 21:54:02 ] まあ、そこの原文の These restrictions ensure that all threads will observe volatile writes performed by any other thread in the order in which they were performed. A conforming implementation is not required to provide a single total ordering of volatile writes as seen from all threads of execution. 2行目の全順序は要求されないってのが結局>>533 の理由なのかな。
608 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 21:55:08 ] >>553 だったorz
609 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 21:58:07 ] >全順序は要求されない 「単一」の全順序は要求されない が重要か。
610 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:00:41 ] 特定のスレッドを特定のCPUコアで動かすのってどうやるんだっけ?
611 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:07:31 ] そんなこと考えてる前にlockしちゃうなぁ。 var obj = new Object(); としといて lock (obj) { s_x = 1; s_ya = s_y; } と lock (obj) { s_y = 1; s_xa = s_x; } で、俺的には万事解決。 色々深遠な問題もあるだろうけど、そんなこと知ったこっちゃねー♪
612 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:18:21 ] まあそもそもこんな処理は普通は出てこないからなー。 これはあくまで予想と異なる結果になることがあるのを示しているだけで。 ただ、こういうコードを、無意識のうちに、動作を無意識に期待して書いてしまう可能性はあるかもしれない。 まあ普通はマルチスレッドで何かを書く場合は常に同期のタイミングは考慮しながら書くから、 多分めったなことはないとは思うけどね。
613 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:24:25 ] でもいるんだよ。 既存の処理をなんにも考えずにマルチスレッドにしちゃうのが・・・
614 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:52:56 ] >>604 参照順は変更されるんじゃないの? volatile読み込みは他の読み込みよりも早く行われるんでしょ?
615 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 22:56:00 ] >>614 まあね。orz