RS.CLIPPY.ARC_WITH_NON_SEND_SYNC
Using `Arc` with a type that does not implement `Send` and `Sync`
This checker is a Clippy lint created by The Rust Project Contributors. The documentation shown here is a copy of the original documentation for: arc_with_non_send_sync. Copyright ©2025 The Rust Team. All rights reserved.
What it does.
This lint warns when you use Arc with a type that does not implement Send or Sync.
Why is this bad?
Arc<T> is a thread-safe Rc<T> and guarantees that updates to the reference counter
use atomic operations. To send an Arc<T> across thread boundaries and
share ownership between multiple threads, T must be both Send and Sync,
so either T should be made Send + Sync or an Rc should be used instead of an Arc.
Example
fn main() {
// This is fine, as `i32` implements `Send` and `Sync`.
let a = Arc::new(42);
// `RefCell` is `!Sync`, so either the `Arc` should be replaced with an `Rc`
// or the `RefCell` replaced with something like a `RwLock`
let b = Arc::new(RefCell::new(42));
}