Interlocked.MemoryBarrierProcessWide Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет барьер памяти всего процесса, который не позволяет перемещать операции чтения и записи из любого ЦП.
public:
static void MemoryBarrierProcessWide();
public static void MemoryBarrierProcessWide ();
static member MemoryBarrierProcessWide : unit -> unit
Public Shared Sub MemoryBarrierProcessWide ()
Комментарии
Метод MemoryBarrierProcessWide
отличается от метода normal MemoryBarrier следующим образом:
Обычный барьер памяти гарантирует, что операции чтения и записи из текущего ЦП не могут перемещаться по барьеру. Барьер памяти на уровне процесса гарантирует, что любые операции чтения или записи с любого ЦП, используемого в процессе, не могут перемещаться по барьеру.
Обычный барьер памяти обеспечивает разумный общий доступ, если каждый поток, обращающийся к данным, использует барьеры. Барьер памяти на уровне процесса заставляет другие ЦП синхронизироваться с памятью процесса (например, для очистки буферов записи и синхронизации буферов чтения). Это позволяет выполнять неблокируемые операции в некоторых потоках и по-прежнему иметь разумный общий доступ.
Нормальный барьер памяти накладывает очень мало накладных расходов; обычные переблокируемые операции, вероятно, стоят менее ста циклов. Барьер памяти на уровне процесса очень дорогой. Он должен заставить каждый ЦП в процессе сделать что-то, по вероятной стоимости тысяч циклов.
Этот MemoryBarrierProcessWide
метод также страдает от всех тонкостей программирования без блокировки. Тем не менее, этот метод может быть чрезвычайно полезен, когда вам действительно нужно вызвать его, что должно быть редким.
Этот метод заключает вызов FlushProcessWriteBuffers в Windows и sys_membarrier в Linux.