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.

Применяется к