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.