以下は、VB.NET (Visual Studio 2010、.NET Framework 4) の Parallel.for ループ内にネストされたループ内で実行中の合計を計算するために開発できた最良の表現です。結果を「合計」で画面に表示する場合、2 つの合計にはわずかな違いがあるため、並列化されたバリアントでは情報が失われることに注意してください。では、どのように情報が失われ、何が起こっているのでしょうか? このコンテキストで現在の金額を維持するための方法論について、誰かが「顕微手術」を提供できますか? (Parallel.for の新規ユーザーへの注意: 通常、0 から始まるメソッドは使用しないため、Parallel.for ステートメントでは、コードが上限として 101-1 を使用するため、I1 は 101 までループします。これは、 MS は、ゼロベースのカウンターを想定して並列コードを開発しました):
Dim sum As Double = 0
Dim lock As New Object
Dim clock As New Stopwatch
Dim i, j As Integer
clock.Start()
sum = 0
For i = 1 To 100
For j = 1 To 100
sum += Math.Log(0.9999)
Next j
Next i
clock.Stop()
MsgBox(sum & " " & clock.ElapsedMilliseconds)
sum = 0
clock.Reset()
clock.Start()
Parallel.For(1, 101, Sub(i1)
Dim temp As Double = 0
For j1 As Integer = 1 To 100
temp += Math.Log(0.9999)
Next
SyncLock lock
sum += temp
End SyncLock
End Sub)
clock.Stop()
MsgBox(sum & " " & clock.ElapsedMilliseconds)