小编Ray*_*Joy的帖子

Rust:dyn Fn()` 无法在线程之间安全共享

我在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)

multithreading rust

2
推荐指数
1
解决办法
4221
查看次数

标签 统计

multithreading ×1

rust ×1