РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1111 of 1245 menu

Функция fence

Функция fence из модуля std::sync устанавливает барьер памяти с заданным порядком упорядочивания. Она не выполняет никаких атомарных операций сама по себе, но гарантирует, что все операции чтения и записи до барьера будут видны другим потокам в правильном порядке относительно операций после барьера. Параметром функция принимает значение перечисления Ordering, которое задаёт тип барьера памяти.

Синтаксис

std::sync::atomic::fence(order: Ordering)

Пример

Давайте установим барьер памяти с порядком SeqCst и выполним атомарную запись:

use std::sync::atomic::{AtomicUsize, fence, Ordering}; fn main() { let data = AtomicUsize::new(0); data.store(1, Ordering::Relaxed); fence(Ordering::SeqCst); data.store(2, Ordering::Relaxed); println!("{}", data.load(Ordering::SeqCst)); }

Результат выполнения кода:

2

Пример

Давайте используем барьер Acquire после записи флага готовности, чтобы гарантировать видимость данных:

use std::sync::atomic::{AtomicBool, AtomicUsize, fence, Ordering}; fn main() { let ready = AtomicBool::new(false); let data = AtomicUsize::new(0); data.store(42, Ordering::Relaxed); fence(Ordering::Release); ready.store(true, Ordering::Relaxed); if ready.load(Ordering::Relaxed) { fence(Ordering::Acquire); println!("{}", data.load(Ordering::Relaxed)); } }

Результат выполнения кода:

42

Смотрите также

  • перечисление Ordering,
    которое задаёт порядок упорядочивания операций
  • тип AtomicUsize,
    который представляет атомарное целое число без знака
  • метод load,
    который атомарно читает значение
  • метод store,
    который атомарно записывает значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить