gpt4 book ai didi

multithreading - 如何告诉 Rust 一个线程的生命周期不会比它的调用者长?

转载 作者:行者123 更新时间:2023-11-29 08:23:43 24 4
gpt4 key购买 nike

<分区>

我有以下代码:

fn main() {
let message = "Can't shoot yourself in the foot if you ain't got no gun";
let t1 = std::thread::spawn(|| {
println!("{}", message);
});
t1.join();
}

rustc 给我编译错误:

closure may outlive the current function, but it borrows message, which is owned by the current function

这是错误的,因为:

  1. 它在这里指的函数是(我相信)main。一旦 main 执行完毕,线程将被杀死或进入 UB。

  2. 它所指的函数明确地在所述线程上调用了 .join()。

前面的代码有任何不安全的地方吗?如果是这样,为什么?如果不是,我怎样才能让编译器理解这一点?

编辑:是的,我知道在这种情况下我可以只移动消息,我的问题是具体问我如何传递对它的引用(最好不必堆分配它,类似于此代码的执行方式:

std::thread([&message]() -> void {/* etc */});

(澄清一下,我实际上想做的是从两个线程访问一个线程安全的数据结构......不涉及使复制工作的问题的其他解决方案也会有所帮助)。

Edit2:这个被标记为重复的问题有 5 页长,因此我认为它本身就是无效问题。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com