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.rsverwenden und es mitrustc main.rs &&./mainkompilieren und ausführen.
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.