Kapitel 6. Unseren eigenen "Bogen" bauen

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

Im Abschnitt "Referenzzählung" haben wir den Typ std::sync::Arc<T>kennengelernt, der durch Referenzzählung gemeinsames Eigentum ermöglicht. Die Funktion Arc::new erstellt eine neue Zuweisung, genau wie Box::new. Im Gegensatz zu Box teilt ein geklontes Arc jedoch die ursprüngliche Zuweisung, ohne eine neue zu erstellen. Die gemeinsame Zuweisung wird erst gelöscht, wenn Arc und alle seine Klone gelöscht werden.

Die Überlegungen zur Speicherordnung, die mit einer Implementierung dieses Typs verbunden sind, können sehr interessant sein. In diesem Kapitel setzen wir die Theorie in die Praxis um, indem wir unsere eigene Arc<T> implementieren. Wir beginnen mit einer Basisversion, erweitern sie dann, um schwache Zeiger für zyklische Strukturen zu unterstützen, und beenden das Kapitel mit einer optimierten Version, die fast identisch mit der Implementierung in der Standardbibliothek ist.

Grundlegende Referenzzählung

In unserer ersten Version wird ein einzelnes AtomicUsize verwendet, um die Anzahl der Arc Objekte zu zählen, die sich eine Zuweisung teilen. Beginnen wir mit einer Struktur, die diesen Zähler und dasT Objekt enthält:

struct ArcData<T> {
    ref_count: AtomicUsize,
    data: T,
}

Beachte, dass diese Struktur nicht öffentlich ist. Sie ist ein internes Implementierungsdetail unserer Arc Implementierung.

Als ...

Get Rust Atomics und Schlösser now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.