Ich versuche, eine Parameterstruktur zu erstellen, die möglicherweise zwischen Threads geteilt werden. Es hat ein Mitglied namens layer_storage
, das einige Mitglieder mutieren müssen. Ich habe den folgenden Code ausprobiert, bekomme aber einen Fehler, der besagt, dass der geklonte Arc
nicht lange genug lebt. Das gleiche Mitglied arbeitete gut vor der Hinzufügung von Arc<Mutex<>>
.Arc Lebensdauer dauert nicht lange genug von 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);
}
Haben Sie versucht, den Klon zu einer Variablen zuzuweisen, gehen Sie dann den Rest in einer gesonderten Erklärung? – ZeissS
Ja, das habe ich gemacht: self.layer_storage.clone() und arbeite dann damit als Variable. – bge0