Тип AtomicI32
Тип AtomicI32 представляет собой атомарное
32-битное целое число со знаком. Он позволяет
безопасно читать и изменять значение из нескольких
потоков одновременно без использования мьютексов.
Все операции над типом выполняются атомарно, то есть
другие потоки видят либо старое, либо новое значение,
но никогда промежуточное. Для каждой операции
указывается порядок доступа к памяти через тип
Ordering. Создать значение можно методом
new, а также через связанные константы,
например AtomicI32::new(0).
Синтаксис
use std::sync::atomic::AtomicI32;
AtomicI32::new(value)
Пример
Давайте создадим атомарное число со значением
5 и прочитаем его с порядком Ordering::SeqCst:
use std::sync::atomic::{AtomicI32, Ordering};
fn main()
{
let atomic = AtomicI32::new(5);
let val = atomic.load(Ordering::SeqCst);
println!("{}", val);
}
Результат выполнения кода:
5
Пример
Давайте увеличим атомарное значение на 10
методом fetch_add и выведем результат:
use std::sync::atomic::{AtomicI32, Ordering};
fn main()
{
let atomic = AtomicI32::new(32);
let old = atomic.fetch_add(10, Ordering::SeqCst);
let new = atomic.load(Ordering::SeqCst);
println!("old = {}, new = {}", old, new);
}
Результат выполнения кода:
old = 32, new = 42
Пример
Давайте заменим значение атомарного числа методом
store и выведем новое значение:
use std::sync::atomic::{AtomicI32, Ordering};
fn main()
{
let atomic = AtomicI32::new(0);
atomic.store(-7, Ordering::SeqCst);
let val = atomic.load(Ordering::SeqCst);
println!("{}", val);
}
Результат выполнения кода:
-7
Смотрите также
-
тип
AtomicUsize,
который представляет атомарное беззнаковое число -
тип
AtomicBool,
который представляет атомарное логическое значение -
перечисление
Ordering,
которое задаёт порядок доступа к памяти -
функция
fence,
которая устанавливает барьер памяти