פתרון חוזי העברה ושיתוף¶
הפונקציות הבאות בודקות תכונות בזמן קומפילציה ואינן מבצעות עבודה בזמן ריצה.
fn needs_send<T: Send>() {}
fn needs_sync<T: Sync>() {}
fn main() {
needs_send::<String>();
needs_sync::<String>();
needs_send::<std::sync::Arc<String>>();
needs_sync::<std::sync::Arc<String>>();
}
הטיפוס Rc אינו מספק את חוזי ההעברה והשיתוף של מונה ההפניות. הטיפוס Arc<RefCell<String>> עדיין מכיל תוכן שאינו Sync, ולכן המונה האטומי החיצוני אינו מספיק כדי להפוך את הגישה למצב הפנימי לבטוחה בין תהליכונים.
לפני מימוש ידני לידית זרה נבדוק את כל המתודות ואת ההשמדה, נזהה אם קיימת דרישת affinity לתהליכון ונגדיר כיצד callbacks מסתיימים. הוכחה שהמצביע אינו null אינה מכסה אף אחת מההתחייבויות האלה לבדה.