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

Класс Arc

Класс Arc (Atomic Reference Counted) представляет собой умный указатель с атомарным подсчётом ссылок. Он позволяет нескольким владельцам одновременно владеть одними и теми же данными, а когда последняя ссылка уничтожается, значение автоматически освобождается. В отличие от Rc, класс Arc можно безопасно передавать между потоками, так как счётчик ссылок изменяется атомарно. Параметром конструктор принимает значение, которым нужно владеть совместно.

Синтаксис

use std::sync::Arc; Arc::new(value)

Пример

Давайте создадим Arc с числом 5 и получим его значение:

use std::sync::Arc; fn main() { let res = Arc::new(5); println!("{}", res); }

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

5

Пример

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

use std::sync::Arc; fn main() { let a = Arc::new(5); let b = Arc::clone(&a); println!("{}", a); println!("{}", b); }

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

5 5

Пример

Давайте подсчитаем количество владельцев Arc с помощью метода strong_count:

use std::sync::Arc; fn main() { let a = Arc::new(5); let b = Arc::clone(&a); let c = Arc::clone(&a); let res = Arc::strong_count(&a); println!("{}", res); }

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

3

Пример

Давайте используем Arc для совместного владения вектором из нескольких потоков:

use std::sync::Arc; use std::thread; fn main() { let data = Arc::new(vec![1, 2, 3, 4, 5]); let mut handles = vec![]; for _ in 0..3 { let data = Arc::clone(&data); let handle = thread::spawn(move || { println!("{:?}", data); }); handles.push(handle); } for handle in handles { handle.join().unwrap(); } }

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

[1, 2, 3, 4, 5] [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]

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

  • метод new,
    который создаёт новый экземпляр Arc
  • метод clone,
    который увеличивает счётчик ссылок и возвращает новый Arc
  • метод try_unwrap,
    который пытается извлечь значение, если Arc единственный владелец
  • метод downgrade,
    который создаёт слабую ссылку Weak на данные
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить