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


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

C#, C♯, C#相談室 Part59



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くらい

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

616 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:00:46 ]
>>614
変更されないよ。

>volatile読み込みは他の読み込みよりも早く行われるんでしょ?
そうじゃない。
volatile読み取りよりも後ろにある読み取りが、
volatile読み取りよりも前に移動されるような最適化は行われない
ってこと。




617 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:07:25 ]
>>616
あぁー、そう読むのかぁ。
もっと精進します。

618 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:10:04 ]
そもそもvolatileの順序保障をどういう風に使うかというと、
例えば
int data1;
int data2;
volatile bool completed;
みたいな変数定義を行って、
スレッドAで、
data1 = 1
data2 = 2
completed = true;
みたいなことをして、
スレッドBで、
if (completed)
{
//data1とdata2を読み取り
}

みたいにしたとき、data1とdata2の読み取りで、
確実にスレッドAで更新された結果にアクセスできる。
これは、
volatile書き込みより前の書き込みは必ずvolatile書き込みより前に行われ、
volatile読み取りより後の読み取りは、必ずvolatile読み取りより後に行われることが保証されてるから。


619 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:12:58 ]
もしこの保証がないと、スレッドBでの読み取りで、
data1とdata2が、スレッドAが書き込んだ結果であることを保証できない。


620 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:14:24 ]
>>618
> volatile書き込みより前の書き込みは必ずvolatile書き込みより前に行われ、
> volatile読み取りより後の読み取りは、必ずvolatile読み取りより後に行われる
リンク先にも確かにかいてあるけれど、これに当てはまらないものはすべて保障されていないと考えるべきなのかな。

volatile書き込みより後ろの書き込みが、volatile書き込みより前に行われる可能性とかそういうの。

621 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:24:01 ]
C#の言語仕様では保証されてないはず。
ECMAのCLIのメモリモデルでも、
・読み取りと書き込みは、volatile の読み取り前に移動することができない。
・読み取りと書き込みは、volatile の書き込み後に移動することができない。
というルールしかないので保証されない。
ただし、CLR2.0のメモリモデルではもう少し保証が強い。
詳しくは
ttp://www.microsoft.com/japan/msdn/msdnmag/issues/05/10/MemoryModels/default.aspx#S3
なんだけど、分かりにくいなw

少なくとも書き込み順序は変更されないはず。
なぜなら、CLR2.0では実質書き込みは全て「解放形式」になっているらしいので。

622 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:26:36 ]
おっと、そこのリンクの
4.書き込みは、同一スレッドからの別の書き込みを超えて移動することができない。
があるので、書き込み順序はたとえvolatileでなくとも、変更されることはないな。


623 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:42:25 ]
順序がどうとか、なんでそういう話になるのか意味がわからんよ。
volatileの意味は文字通りその変数を非同期的に変更されうるものとして
扱うという意味以上でも以下でもないはずだと思うんだけど....

624 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:48:23 ]
>>623
俺もそれだけの意味だと思っていたんだけど、C#では違うということを恥ずかしながら今日知りました。

625 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:52:24 ]
なんだよ、結局またわかってないヤツが暴れてただけかよw

626 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 00:02:39 ]
俺は暴れてはいないつもりなので、他にも分かってない人がいたのでしょう。



627 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 00:04:30 ]
>>626
お前だろ

628 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 00:08:54 ]
俺のようなヘボプログラマにとっての結論は、
マルチスレッドではvolatileに頼るなということだな。






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

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

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