Rust多线程场景下的生命周期理解及代码疑问
Rust多线程场景下的生命周期理解及代码疑问
我现在在写一个多线程版本的蒙特卡洛函数,需要在多个线程里读取对应的数据结构,目前写的函数雏形是这样的:
fn parallel_monte_carlo<T, R>( rngs: &mut [&mut R], initial_state: &[T], params: &[f64], ) -> f64 where T: Display + Debug + Send, R: Rng + ?Sized + Send + Sync, Standard: Distribution<T> + Send, { let threads: Vec<_> = (0..2) .map(|idx| { let rng_ptr = &mut *rngs[idx] as *mut R; // 后续的线程逻辑还没写完,但这里用了原始指针,心里一直没底
我这里为了在线程里使用可变的RNG实例,用了原始指针做类型转换,但总觉得这种写法不太符合Rust的安全规范,想请教各位大佬:
- 这种用原始指针处理多线程中可变引用的方式,有没有潜在的线程安全或者生命周期问题?
- 有没有更地道的Rust写法,能不用原始指针就安全地在多线程里分发这些可变的RNG实例?
备注:内容来源于stack exchange,提问作者Dumbo
相关产品推荐
相关产品推荐

