スレッド間で共有される可能性のあるパラメータ構造体を作成しようとしています。メンバーにはlayer_storage
という名前のメンバーがいます。私は次のコードを試しましたが、クローン化されたArc
が十分に長くは生きていないというエラーが表示されています。この同じメンバーは、Arc<Mutex<>>
の追加の前にうまくいきました。アークの寿命がclone()から十分に長くはありません
use std::sync::{Arc, Mutex};
#[derive(Clone)]
pub struct Params {
pub optional: Vec<f32>,
}
pub struct ParamManager {
layer_storage: Arc<Mutex<Vec<Params>>>,
}
impl Default for ParamManager {
fn default() -> ParamManager {
ParamManager {
layer_storage: Arc::new(Mutex::new(vec![Params { optional: vec![1.0f32, 2.0f32] },
Params { optional: vec![3.0f32, 4.0f32] }])),
}
}
}
impl ParamManager {
pub fn get_mut_params(&mut self, layer_index: usize) -> &mut Params {
let layers_arc = self.layer_storage.clone();
let layers = layers_arc.get_mut().unwrap();
// tried this initially:
// let layers = self.layer_storage.clone().get_mut().unwrap();
assert!(layers.len() - 1 >= layer_index);
&mut layers[layer_index]
}
}
fn main() {
let mut bla = ParamManager::default();
let i = bla.get_mut_params(0);
}
を、あなたは別の文で残りを行い、その後、変数にクローンを割り当てようとしましたか? – ZeissS
はい、それは私がやったことです:self.layer_storage.clone()そしてそれを変数として扱います。 – bge0