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

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

## Root Cause

Rc is not Send because it uses reference counting without atomic operations; cross-thread use causes data races.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| rustc 1.68 | active | — | — |
| rustc 1.75 | active | — | — |
| rustc 1.82 | active | — | — |

## Workarounds

1. **Replace Rc with Arc (atomic reference counting) and use Arc<Mutex<T>> or Arc<RwLock<T>> for interior mutability.** (90% success)
   ```
   Replace Rc with Arc (atomic reference counting) and use Arc<Mutex<T>> or Arc<RwLock<T>> for interior mutability.
   ```
2. **Use `std::sync::Mutex<RefCell<dyn Trait>>` or `parking_lot::Mutex` if you must keep Rc, but prefer Arc.** (75% success)
   ```
   Use `std::sync::Mutex<RefCell<dyn Trait>>` or `parking_lot::Mutex` if you must keep Rc, but prefer Arc.
   ```

## Dead Ends

- **** — Mutex<Arc<RefCell<...>>> adds overhead and doesn't solve the fundamental Rc issue; use Arc instead. (70% fail)
- **** — Deriving Clone doesn't change thread safety; the compiler still requires Send on the inner type. (90% fail)
