Разделенная собственность с использованием Arc в Rust

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом лабе мы исследуем использование Arc (атомарно подсчитываемая ссылка) в Rust, которое используется, когда требуется разделенная собственность между потоками.

Примечание: Если в лабе не указано имя файла, вы можете использовать любое имя файла, которое хотите. Например, вы можете использовать main.rs, скомпилировать и запустить его с помощью rustc main.rs &&./main.

Arc

Когда требуется разделенная собственность между потоками, можно использовать Arc (атомарно подсчитываемая ссылка). Эта структура, с помощью реализации Clone, может создать указатель на место значения в куче памяти, увеличивая счетчик ссылок. Поскольку она разделяет собственность между потоками, когда последний указатель на значение выходит из области видимости, переменная удаляется.

use std::time::Duration;
use std::sync::Arc;
use std::thread;

fn main() {
    // В этом объявлении переменной указывается ее значение.
    let apple = Arc::new("the same apple");

    for _ in 0..10 {
        // Здесь не указывается значение, так как это указатель на
        // ссылку в куче памяти.
        let apple = Arc::clone(&apple);

        thread::spawn(move || {
            // Поскольку использовался Arc, потоки можно создавать с использованием
            // значения, выделенного в месте указателя переменной Arc.
            println!("{:?}", apple);
        });
    }

    // Убедитесь, что все экземпляры Arc распечатаны из созданных потоков.
    thread::sleep(Duration::from_secs(1));
}

Резюме

Поздравляем! Вы завершили лабу по Arc. Вы можете практиковаться в более многих лабах в LabEx, чтобы улучшить свои навыки.