[VB.NET] ByRef と Thread のコンボヒットパターン

2010年7月31日

 なんとなく思いついたのでメモ。
 そもそもだなー、という話はあるとしても、なんかどっかでいつかこんなバグではまる気がしてならない。
 こんなのに遭遇したら、絶対にわからん。

Module Module1
    Private _value As Integer

    Sub Main()
        Dim t As New System.Threading.Thread(AddressOf ThreadRoutine)
        t.Start()
        _value = 100
        Class1.ClassMethod(_value)
    End Sub

    Sub ThreadRoutine()
        System.Threading.Thread.Sleep(500)  ' 処理中
        _value = 300
    End Sub
End Module

Class Class1
    Public Shared Sub ClassMethod(ByRef value As Integer)
        value = value * 2
        System.Threading.Thread.Sleep(1000)  ' 処理に時間がかかった

        ' 200のはずでは? 100*2だよね?
        If (value <> 200) Then System.Console.WriteLine("200じゃないよ?")
    End Sub
End Class





カテゴリー: Program, VB.NET

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org