[表示 : 全て 最新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くらい

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に頼るなということだな。

629 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 00:08:57 ]
そんな、高速だけど分かってる奴でもとっちらかって間違いかねない仕掛けで書くより、
遅くても排他処理でガチガチ泥臭く書いたほうがメンテナンスとか考えると現実的じゃね?
忘れた頃に見直す度に一々頭の中で再検証すんのかよ、って話。

630 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 00:10:43 ]
だね。メモリバリアメソッドも用がなさそうだし、当面lockステートメントでいいやって思った。
ちゃんと理解できたら正しく速く動作するライブラリを書きたいものです。

631 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 00:13:12 ]
>>627
なんだ、暴れたのがいまさら恥ずかしくなったか?

632 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 01:05:25 ]
>>623
こいつがどこまでもバカなだけ。




633 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 01:07:47 ]
>>630
基本的には正しい判断だと思うよ。
lockだって別にそんなに重いわけじゃない(状況によるが)。


634 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 01:09:53 ]
>>623
言語仕様からMSDNマガジンの詳細な記事から
何から何まで何度も示されてるのに意味が分からないなら
お前は本当に頭が悪いんだろう。


635 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 01:57:39 ]
>>553のって
s_x = 1;
s_ya = s_y;
の部分について、s_yの読み取りが先に行われて、
s_xの書き込み、s_yaの書き込みが行われたってことになるの?

636 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 05:13:58 ]
どうなの?

637 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 06:28:32 ]
>>629
鉄板でしょう。


638 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 08:58:25 ]
C#の言語仕様のダウンロードURI教えてください。

639 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 09:10:49 ]
VS2010のフォルダ内にありましたorz

640 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 09:58:10 ]
object[] a = string[]{"a"};
string[] b = a as string[];

この処理は純粋にaへの代入とbへのキャストが行われているだけで、
List<object>とList<string>を型変換するときのようなインスタンス
の新規作成はされないと考えてよいのでしょうか?

641 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 13:53:30 ]
ちょっとした疑問

class A {
object lockobj = new object;

string _a;
public a {
get {
lock(lockobj){
return _a;
}
}
set {
lock(lockobj){
_a = value;
}
}
}

これって、ちゃんとロック掛かるんだろうか?

642 名前:デフォルトの名無しさん [2010/06/18(金) 13:54:34 ]




643 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 13:56:56 ]
>>641
はい

644 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 15:16:12 ]
>>641
いいえ、コンパイルすらできません

645 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 15:25:20 ]
>>635ってどうなの?
なんで頭いい人たちみんなスルーなの

646 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 15:31:28 ]
OoOについてggrks

647 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 16:28:23 ]
>>644
型がないからってか?
質問の意図はそうじゃないだろ・・・

648 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 17:16:46 ]
>>641
質問のポイントはLockのスコープからのreturnだろ?
ロックはreturnステートメントの実行直後にはずれるから普通に使える。

649 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 18:46:23 ]
>>635
>>553の件少し判った気がする。
環境依存があるようだからここにいる人たちも確認してもらえると助かる。

Releaseモードでも確認できるように修正。コンソールに出力させるようにする。
>Debug.Assert(s_xa == 1 || s_ya == 1);
if (!(s_xa == 1 || s_ya == 1)) Console.WriteLine("* {0}, {1}", s_xa, s_ya); 

こちらの環境で確認できたこと。
マルチCPU、マルチコア、ハイパースレッディングでも起きる。
シングルCPU環境では起きない。
Relaseビルド、Debugビルドはどちらでも良い。
Debug実行時に起きる。Debugなしで実行では起きない。

結論
予想が当たってればOoOとか高尚な問題でなく、IDEのデバッガのバグの可能性がある。

650 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 19:06:46 ]
>>646
すっこんでろ

651 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 20:41:20 ]
>>649
俺の環境では、デバッグなし実行でも起こってる。


652 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 20:43:41 ]
>>641
ちゃんとロックかかるってのはどういう意味で言ってる?
ロック自体はもちろん期待通り普通にかかるが、
objA.A =
objA.A + "hoge";
なんてのをアトミックに実行することは当然ながらできない。




653 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 20:44:30 ]
改行入った…
objA.A = objA.A + "hoge";
な。


654 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 21:15:29 ]
>>618
なんか違わないか?
その例だと、スレッドBでdata1,data2が「正しく」読める保証は何もないのでは?

でなきゃ、そもそも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