# error[E0277]: `std::cell::Cell<i32>` cannot be shared between threads safely

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

## Root Cause

Using a non-Send type like Cell inside an Arc or other shared ownership container that is expected to be Send.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 1.70 | active | — | — |
| 1.75 | active | — | — |
| 1.80 | active | — | — |

## Workarounds

1. **Replace Cell with Mutex inside Arc: `Arc<Mutex<i32>>` instead of `Arc<Cell<i32>>`** (95% success)
   ```
   Replace Cell with Mutex inside Arc: `Arc<Mutex<i32>>` instead of `Arc<Cell<i32>>`
   ```
2. **Use `RwLock` if read-heavy workload: `Arc<RwLock<i32>>`** (90% success)
   ```
   Use `RwLock` if read-heavy workload: `Arc<RwLock<i32>>`
   ```
3. **For single-threaded context, use `Rc<RefCell<i32>>` instead of Arc** (80% success)
   ```
   For single-threaded context, use `Rc<RefCell<i32>>` instead of Arc
   ```

## Dead Ends

- **Wrapping Cell in Arc directly without any synchronization** — Arc<Cell<T>> is not Send because Cell is !Send. The compiler correctly rejects this. (95% fail)
- **Using Mutex<Cell<T>> but forgetting to implement Send manually** — Mutex<Cell<T>> is Send if T: Send, but Cell is !Send, so it still fails. Need to switch to Mutex<T> directly. (70% fail)
