Propriedade Compartilhada com Rust Arc

Beginner

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

Introdução

Neste laboratório, exploramos o uso de Arc (Atomically Reference Counted) em Rust, utilizado quando é necessária a propriedade compartilhada entre threads.

Nota: Se o laboratório não especificar um nome de arquivo, você pode usar qualquer nome de arquivo que desejar. Por exemplo, você pode usar main.rs, compilar e executar com rustc main.rs && ./main.

Arc

Quando é necessária a propriedade compartilhada entre threads, Arc (Atomically Reference Counted) pode ser usado. Esta estrutura, por meio da implementação Clone, pode criar um ponteiro de referência para a localização de um valor na pilha de memória, ao mesmo tempo que incrementa o contador de referência. Como compartilha a propriedade entre threads, quando o último ponteiro de referência para um valor sai de escopo, a variável é descartada.

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

fn main() {
    // Esta declaração de variável é onde seu valor é especificado.
    let apple = Arc::new("a mesma maçã");

    for _ in 0..10 {
        // Aqui não há especificação de valor, pois é um ponteiro para uma
        // referência na pilha de memória.
        let apple = Arc::clone(&apple);

        thread::spawn(move || {
            // Como Arc foi usado, as threads podem ser criadas usando o valor alocado
            // na localização do ponteiro da variável Arc.
            println!("{:?}", apple);
        });
    }

    // Certifique-se de que todas as instâncias de Arc sejam impressas pelas threads criadas.
    thread::sleep(Duration::from_secs(1));
}

Resumo

Parabéns! Você concluiu o laboratório Arc. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.