我在Rust中研究多线程,发现一个关于在thread::spawn中使用Fn的错误。我的代码是这样的:
use std::thread;
fn print_hello() {
println!("hello");
}
fn run_fn(f: &dyn Fn()) {
let hand = thread::spawn(move || {
f();
});
}
fn main() {
run_fn(&print_hello);
}
Run Code Online (Sandbox Code Playgroud)
编译后,我收到以下错误:
Compiling fntest v0.1.0 (D:\ray\source\rust\fntest)
error[E0277]: `dyn Fn()` cannot be shared between threads safely
--> src\main.rs:8:16
|
8 | let hand = thread::spawn(move || {
| ^^^^^^^^^^^^^ `dyn Fn()` cannot be shared between threads safely
|
= help: the trait `Sync` is not implemented for `dyn Fn()`
= note: required because of the …Run Code Online (Sandbox Code Playgroud)