在Actix中,我们可以使用Arc
use actix::prelude::*;
use std::sync::{Arc, RwLock};
struct MyActor {
data: Arc>>
}
impl Actor for MyActor {
type Context = Context;
}
impl MyActor {
pub fn new(data: Arc>>) -> Self {
MyActor { data }
}
pub fn get_data(&self) -> Vec {
let data = self.data.read().unwrap();
data.clone()
}
pub fn set_data(&self, new_data: Vec) {
let mut data = self.data.write().unwrap();
*data = new_data;
}
}
在这个例子中,我们创建了一个MyActor结构体,它有一个名为data的Arc
现在,我们可以在多个线程中使用MyActor实例。下面是一个示例:
use std::thread;
let data = Arc::new(RwLock::new(vec![10, 20, 30]));
let actor = MyActor::new(data.clone());
let handle1 = thread::spawn(move || {
let new_data = vec![40, 50, 60];
actor.set_data(new_data.clone());
println!("Thread 1: data={:?}", actor.get_data