1 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 17:44:56 ] 前スレ VB.NET質問スレ(Part30) pc12.2ch.net/test/read.cgi/tech/1242522019/l50 テンプレは>>2 〜
887 名前:デフォルトの名無しさん [2009/11/13(金) 04:07:16 ] VB2010ベータ1をインスコして勉強がてら遊んでみた。 最近はマルチコアのCPUも多くなったし、重いループ処理は極力マルチコアで処理させようと考えて 次のようなコードで試してみたんだけど・・・ Private counter As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click counter = 0 System.Threading.Parallel.For(0, 10000, AddressOf proc) Console.WriteLine(counter) End Sub Private Sub proc(ByVal index As Integer) counter += 1 For i As Integer = 0 To 1000000 Next End Sub counterの値が10000になると思ったのに何故か9998とかになっちまうじゃねえか!この野郎! あと、System.Threading.Parallel.ForEachも試してみたが、これも同じ様に列挙が抜け落ちる! 言うまでもなく例外など出ない(笑) 俺がおかしいのか??それともベータだから未完成ってことなのか?
888 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 05:32:11 ] >>887 そもそも += はスレッドセーフじゃなかったと思う
889 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 05:39:45 ] >counter += 1 Interlocked.Increment(counter) VBってvolatileにあたるのってなかったっけ?
890 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 09:37:39 ] スレッドセーフってなんだよ!意味わからない専門用語つかうな!バーカ
891 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 09:38:28 ] >>887 当たり前であって馬鹿はお前だ。 どういう事か理解できないならパラレルとかマルチスレッド絡みには 手を出さない方がいいぜ。
892 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 10:15:42 ] >>890 MSDNのクラスのリファレンスに必ず「スレッドセーフ」があるんだが。 それでいて”意味がわからない専門用語”といってる時点で、あんたがココに来る資格ないよ
893 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 13:19:11 ] 質問しといて分からない単語が出てきたら調べる努力もせずに逆ギレって・・・