обойти?:
use std::sync::{Arc, Mutex};
use std::thread;
trait Data {}
struct DataImpl;
impl Data for DataImpl {}
fn main() -> anyhow::Result<()> {
let data = Arc::new(Mutex::new(DataImpl{}));
let data_dyn: Arc<Mutex<dyn Data>> =
Arc::new(Mutex::new(DataImpl{}));
let handle = thread::spawn(move || {
// OK
drop(data);
// ERROR: dyn Data cannot be sent between threads safely
drop(data_dyn);
});
handle.join().unwrap();
Ok(())
}
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=42b4b2ce83136af29b97f73a8c000dd8
Потому что не Send. trait Data: Send {}
Обсуждают сегодня