下記のようなコードは、aの値が、必ずしも0とはならない。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int a = 0;
List<string> l = new List<string>();
for (int i = 0; i < 10000; i++)
{
l.Add("" + i);
}
Parallel.ForEach(l, s =>
{
a = a + int.Parse(s);
Console.WriteLine(s);
a = a - int.Parse(s);
});
Console.WriteLine("a=" + a);
Console.ReadLine();
}
}
}
a = a + int.Parse(s);
↓
lock(l) a = a + int.Parse(s);
となります。
0 件のコメント:
コメントを投稿