Multithreading 有没有办法在Rust中生成具有指定生存期的线程?

Multithreading 有没有办法在Rust中生成具有指定生存期的线程?,multithreading,rust,Multithreading,Rust,我对生锈还很陌生,所以我遇到了一些不习惯的事情。一个让我感到悲伤的问题与线程有关 我想生成一个执行结构的方法的线程,但我不能,因为该方法需要有一个”静态生存期。我更希望该方法(通过扩展结构)没有静态的生存期 如果我确定线程将在删除结构的实例化值之前退出,有没有办法与Rust进行通信?换句话说,我可以告诉Rust我可以保证值在线程退出之前不会被删除吗?或者,有没有一种方法可以将生命周期传递给线程 如果这一切都不可能,那么可以做些什么呢?我已经研究过使代码异步化,但是没有成功地解决上述问题 如果方法

我对生锈还很陌生,所以我遇到了一些不习惯的事情。一个让我感到悲伤的问题与线程有关

我想生成一个执行结构的方法的线程,但我不能,因为该方法需要有一个
”静态
生存期。我更希望该方法(通过扩展结构)没有
静态的
生存期

如果我确定线程将在删除结构的实例化值之前退出,有没有办法与Rust进行通信?换句话说,我可以告诉Rust我可以保证值在线程退出之前不会被删除吗?或者,有没有一种方法可以将生命周期传递给线程

如果这一切都不可能,那么可以做些什么呢?我已经研究过使代码异步化,但是没有成功地解决上述问题

如果方法和结构必须有一个
静态的
生存期,我该如何适当地指定它呢

下面是一个简化的问题示例:

pub结构物{
值:i32,
}
暗示的事情{
pub fn new(值:i32)->Thing{
东西{
价值
}
}
fn in_螺纹(自){
println!(“线程中”);
//做一些阻碍线程的事情
}
发布fn生成线程(&self){
std::thread::spawn(移动| |){
self.in_thread();//此处出现问题
});
}
}
如果这一切都不可能,那么可以做些什么呢?我已经研究过使代码异步化,但是没有成功地解决上述问题


我不建议通过引用将数据传递给其他线程。相反,请尝试设计程序,以便线程可以拥有数据。您可以通过在生成线程时移动数据来实现这一点,或者,您可能希望通过传递数据。

请注意,此示例(如果您在
in_thread
中使用
self
执行任何操作)是不可靠的,因为您没有在句柄上调用
join
,当子线程仍在运行时,
self
可能会被删除。这正是作用域线程所防止的问题,它使得不可能忘记调用
join
。我相信这回答了我的问题,谢谢。是的,我本来会加入一个对
join
的调用,但为了简单起见没有加入。