审查这个生成的监听器中心。
以非拥有方式保存监听器;向所有存活监听器发布并清理失效条目;不得在持有注册表锁时调用监听器代码;锁中毒时返回错误;不得产生输出。
Rust
use std::sync::{Arc, Mutex};
trait Listener: Send + Sync {
fn on_message(&self, message: &str);
}
struct Hub {
listeners: Mutex<Vec<Arc<dyn Listener>>>,
}
impl Hub {
fn subscribe(&self, listener: Arc<dyn Listener>) {
self.listeners.lock().unwrap().push(listener);
}
fn publish(&self, message: &str) {
let listeners = self.listeners.lock().unwrap();
for listener in listeners.iter() {
listener.on_message(message);
}
println!("delivered to {}", listeners.len());
}
}
生成代码仅作示例,不代表任何特定模型