Множественные вызовы Parallel.ForEach, MemoryBarrier?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Множественные вызовы Parallel.ForEach, MemoryBarrier?

Сообщение Гость »


У меня есть несколько строк данных, и я хочу использовать Parallel.ForEach для вычисления некоторого значения в каждой строке, как показано ниже...

класс DataRow { общественный двойной A {получить; внутренний набор; } общественный двойной B {получить; внутренний набор; } общественный двойной C {получить; внутренний набор; } общедоступная строка данных() { А = двойной.NaN; B = двойной.NaN; C = двойной.NaN; } } классная программа { статическая пустота ParallelForEachToyExample() { вар rnd = новый Random(); вар df = новый список(); для (int я = 0; я { др.Б = 2,0 * др.А; }); // Когда-нибудь нужно? (III) //Thread.MemoryBarrier(); // Параллельно для каждых 2 (IV) Parallel.ForEach(df, dr => { др.С = 2,0 * др.Б; }); } } (В этом примере нет необходимости в распараллеливании, а если бы оно и было, все это могло бы быть внутри одного Parallel.ForEach. Но это упрощенная версия некоторого кода, в котором он делает смысл настроить так).

Возможно ли здесь переупорядочить операции чтения, чтобы получить строку данных, где B != 2A или C != 2B?< /п> Скажем, первый Parallel.ForEach (II) назначает рабочий поток 42 для работы со строкой данных 0. А второй Parallel.ForEach (IV) назначает рабочий поток 43 для работы со строкой данных 0 (как только завершится первый Parallel.ForEach). Есть ли вероятность, что чтение dr.B для строки 0 в потоке 43 вернет double.NaN, поскольку запись из потока 42 еще не произошла? И если да, то поможет ли вообще установка барьера памяти на уровне III? Будет ли это заставлять обновления первого Parallel.ForEach быть видимыми для всех потоков до запуска второго Parallel.ForEach?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Parallel.ForEach и Parallel.For, похоже, ставят элементы в очередь в отдельных потоках.
    Гость » » в форуме C#
    0 Ответы
    89 Просмотры
    Последнее сообщение Гость
  • Как преобразовать этот код foreach в Parallel.ForEach?
    Anonymous » » в форуме C#
    0 Ответы
    144 Просмотры
    Последнее сообщение Anonymous
  • Какова цель объединения MemoryBarrier в .NET?
    Anonymous » » в форуме C#
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Почему в C# Thread.MemoryBarrier() используется «lock or» вместо mfence?
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Почему в C# Thread.MemoryBarrier() используется «lock or» вместо mfence?
    Anonymous » » в форуме C#
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»