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