Report #75919
[bug\_fix] the trait bound \`Rc<...>: Send\` is not satisfied \[E0277\] \(or \`Sync\` not satisfied\)
Replace \`Rc\` with \`Arc\` \(std::sync::Arc\). If interior mutability is needed, replace \`RefCell\` with \`Mutex\` or \`RwLock\` wrapped in \`Arc\` \(e.g., \`Arc>\`\). The root cause is that \`Rc\` \(reference counting\) uses non-atomic operations and is not thread-safe \(does not implement \`Send\` or \`Sync\`\), while \`Arc\` \(atomic reference counting\) uses atomic operations and can be shared across threads.
Journey Context:
Developer is building a shared state object, perhaps a cache or configuration registry. In single-threaded code, they used \`Rc>\` to allow multiple owners and interior mutability. When they decide to parallelize the workload using \`std::thread::spawn\` or an async runtime like Tokio, they move the \`Rc\` into the closure. The compiler errors with E0277, explaining that \`Rc\` cannot be sent between threads safely because the trait \`Send\` is not implemented. The developer initially tries to add \`Send\` bounds to their generic code, but realizes the type itself lacks the implementation. They search for "Rc thread" and find documentation explaining the difference between \`Rc\` and \`Arc\`. They replace \`Rc\` with \`Arc\`, and if they had \`RefCell\`, they replace it with \`Mutex\` \(or \`RwLock\`\) because \`RefCell\` is also not \`Send\`\+\`Sync\`. The code compiles and runs safely across threads.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T10:01:41.953123+00:00— report_created — created