Требуется ли MemoryBarrier в этом коде? - PullRequest
2 голосов
/ 18 декабря 2010
using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        double[] numbers = new double[10000];

        Parallel.For(0, 9999, index => numbers[index] = index * 3);

        Thread.MemoryBarrier();

        // do something with numbers
    }
}

Требуется ли MemoryBarrier () выше или Parallel.For имеет встроенный барьер памяти?

1 Ответ

4 голосов
/ 18 декабря 2010

Нет необходимости в барьере памяти, когда вы выполняете Parallel. Поскольку поток, который вызывает функцию, ожидает окончания задач, если он ждет, он, вероятно, использует некоторый синхронизатор, чтобы уведомить ожидающий поток, когда синхронизатор уведомляет «это необходимо», чтобы иметь барьер освобождения, барьер освобождения гарантирует, что все изменения, сделанные в коде выше, видны глобально, поэтому вам не нужен memory.barrier

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...