impl PartialEq for Collector { /// Checks if both handles point to the same collector. fn eq(&self, rhs: &Collector) -> bool {
Arc::ptr_eq(&self.global, &rhs.global)
}
} impl Eq for Collector {}
/// A handle to a garbage collector. pubstruct LocalHandle { pub(crate) local: *const Local,
}
while !(*guard.local).bag.with(|b| (*b).is_empty()) {
guard.flush();
}
}
}
}
#[test] fn garbage_buffering() { let collector = Collector::new(); let handle = collector.register();
drop(collector);
let guard = &handle.pin(); unsafe { for _ in0..10 { let a = Owned::new(7).into_shared(guard);
guard.defer_destroy(a);
}
assert!(!(*guard.local).bag.with(|b| (*b).is_empty()));
}
}
thread::scope(|scope| { for _ in0..NUM_THREADS {
scope.spawn(|_| { let handle = collector.register(); for _ in0..N { let guard = &handle.pin();
let before = collector.global.epoch.load(Ordering::Relaxed);
collector.global.collect(guard); let after = collector.global.epoch.load(Ordering::Relaxed);
let collector = Collector::new(); let handle = collector.register();
unsafe { let guard = &handle.pin();
letmut v = Vec::with_capacity(COUNT); for i in0..COUNT {
v.push(i as i32);
}
let len = v.len(); let cap = v.capacity(); let ptr = ManuallyDrop::new(v).as_mut_ptr();
guard.defer_unchecked(move || {
drop(Vec::from_raw_parts(ptr, len, cap));
DESTROYS.fetch_add(len, Ordering::Relaxed);
});
guard.flush();
}
while DESTROYS.load(Ordering::Relaxed) < COUNT { let guard = &handle.pin();
collector.global.collect(guard);
}
assert_eq!(DESTROYS.load(Ordering::Relaxed), COUNT);
}
impl Drop for Elem { fn drop(&mutself) {
DROPS.fetch_add(1, Ordering::Relaxed);
}
}
let collector = Collector::new();
thread::scope(|scope| { for _ in0..THREADS {
scope.spawn(|_| { let handle = collector.register(); for _ in0..COUNT { let guard = &handle.pin(); unsafe { let a = Owned::new(Elem(7i32)).into_shared(guard);
guard.defer_destroy(a);
}
}
});
}
})
.unwrap();
let handle = collector.register(); while DROPS.load(Ordering::Relaxed) < COUNT * THREADS { let guard = &handle.pin();
collector.global.collect(guard);
}
assert_eq!(DROPS.load(Ordering::Relaxed), COUNT * THREADS);
}
}
Messung V0.5 in Prozent
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.19Bemerkung:
(vorverarbeitet am 2026-08-25)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.