# error[E0277]: `Rc<dyn Trait>` cannot be sent between threads safely

- **ID:** `rust/e0277-trait-bound-send-not-satisfied-for-rc`
- **Domain:** rust
- **Category:** type_error
- **Error Code:** `E0277`
- **Verification:** ai_generated
- **Fix Rate:** 90%

## Root Cause

Rc is not Send because it uses reference counting without atomic operations, making it unsafe to share across threads.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| Rust 1.75.0 | active | — | — |
| Rust 1.80.0 | active | — | — |
| Rust nightly 2024-01-01 | active | — | — |

## Workarounds

1. **Replace `Rc<dyn Trait>` with `Arc<dyn Trait>` which uses atomic reference counting and implements Send** (95% success)
   ```
   Replace `Rc<dyn Trait>` with `Arc<dyn Trait>` which uses atomic reference counting and implements Send
   ```
2. **Use `std::sync::Mutex<Box<dyn Trait>>` if you need mutable access from multiple threads** (85% success)
   ```
   Use `std::sync::Mutex<Box<dyn Trait>>` if you need mutable access from multiple threads
   ```

## Dead Ends

- **Wrap Rc in a Mutex: `Mutex<Rc<dyn Trait>>`** — Mutex only provides interior mutability, not Send. Rc still prevents Send because the reference count isn't atomic. (90% fail)
- **Add `unsafe impl Send for MyType` manually** — Unsafe impl can cause data races and undefined behavior if Rc is actually used across threads; the compiler warning is legitimate. (95% fail)
