Нужно ли беспокоиться о 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));
}
}