Gemeinsame Besitzung mit Rust Arc

RustRustBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab untersuchen wir die Verwendung von Arc (Atomically Reference Counted) in Rust, das verwendet wird, wenn die gemeinsame Besitzung zwischen Threads erforderlich ist.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/ControlStructuresGroup(["Control Structures"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/type_casting("Type Conversion and Casting") rust/ControlStructuresGroup -.-> rust/for_loop("for Loop") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/variable_declarations -.-> lab-99264{{"Gemeinsame Besitzung mit Rust Arc"}} rust/type_casting -.-> lab-99264{{"Gemeinsame Besitzung mit Rust Arc"}} rust/for_loop -.-> lab-99264{{"Gemeinsame Besitzung mit Rust Arc"}} rust/function_syntax -.-> lab-99264{{"Gemeinsame Besitzung mit Rust Arc"}} rust/expressions_statements -.-> lab-99264{{"Gemeinsame Besitzung mit Rust Arc"}} rust/lifetime_specifiers -.-> lab-99264{{"Gemeinsame Besitzung mit Rust Arc"}} rust/method_syntax -.-> lab-99264{{"Gemeinsame Besitzung mit Rust Arc"}} end

Arc

Wenn die gemeinsame Besitzung zwischen Threads erforderlich ist, kann Arc (Atomically Reference Counted) verwendet werden. Diese Struktur kann über die Clone-Implementierung einen Verweiszeiger auf die Speicheradresse eines Werts im Speicherheap erstellen, während der Referenzzähler erhöht wird. Da sie die Besitzung zwischen Threads teilt, wird die Variable gelöscht, wenn der letzte Verweiszeiger auf einen Wert außerhalb des Gültigkeitsbereichs ist.

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

fn main() {
    // In dieser Variablendeklaration wird der Wert angegeben.
    let apple = Arc::new("the same apple");

    for _ in 0..10 {
        // Hier wird kein Wert angegeben, da es sich um einen Zeiger auf eine
        // Referenz im Speicherheap handelt.
        let apple = Arc::clone(&apple);

        thread::spawn(move || {
            // Da Arc verwendet wurde, können Threads mit dem in der Arc-Variablenzeigeradresse
            // zugewiesenen Wert erstellt werden.
            println!("{:?}", apple);
        });
    }

    // Stellen Sie sicher, dass alle Arc-Instanzen von den erstellten Threads ausgegeben werden.
    thread::sleep(Duration::from_secs(1));
}

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Arc-Lab abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.