使用并行扩展时是否需要关注 MemoryBarriers?
编辑 - 详细说明原始问题是开放式的:(@xanatos 的答案是我正在寻找的答案)
举一个具体的例子:假设我使用 Parallel.ForEach 并且每次迭代都设置类中属性的值(每次迭代都设置它自己的特定属性,没有两次迭代设置相同属性的值)。在调用 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));
}
}