Parallel Extensions を使用する場合、MemoryBarriers について考慮する必要はありますか?
編集 - 元の質問が自由回答形式だったので詳しく説明します: (@xanatos の回答は私が探していたものでした)
具体的な例を挙げると、Parallel.ForEach を使用し、各反復がクラス内のプロパティの値を設定するとします (各反復は独自の特定のプロパティを設定し、2 つの反復で同じプロパティの値を設定することはありません)。Parallel.ForEach を呼び出した同じスレッドで、Parallel.ForEach から設定されたプロパティにアクセスします。
class Program
{
static void Main(string[] args)
{
var t = new Test();
t.InitializePropertiesInParallel();
var a = t.PropA; // Could never be 0?
var b = t.PropB; // Could never be 0?
}
}
public class Test
{
public int PropA { get; set; }
public int PropB { get; set; }
public void InitializePropertiesInParallel()
{
var initializers = new List<Action<int>>()
{
i => PropA = i,
i => PropB = i
};
initializers.AsParallel().ForAll(a => a(1));
}
}