我有一个struct,叫Boss吧,用来管理一些资源。
别人让我同一个一个Service来管理它。我这样写,Service里面有一个Arc<Mutex<Boss>>
struct Service {
boss: Arc<Mutex<Boss>>,
calls: vec<....>,
impl Service {
fn new(boss: Arc<Mutex<Boss>>) -> Self {
boss, ..Default::default()
}
大概这个意思吧。程序里面用到多线程,主线程main里面启动Service
let boss = Arc::new(Mutex::new(...));
let boss_clone=manager.clone();
api_to_start_and_block({
let service = ... (boss.clone());
// code to use service
// code to join thread, wait for service to complete, wait for a signal (Stop)
}).await;
现在的问题,stop发生了,这个线程join完成,这个api_to_start_and_block结束,main结束,但是看到系统的一个出错信息,说boss还在。这是因为我们那个Service其实还在运行。
我想问,在Service还在的时候,能不能把这个boss给释放了啊?
比如,我猜啊,如果boss: Option<Arc<...>> 是不是赋值None可以啊?那么如果不改那么多代码,怎样把service里面所拥有的这个Arc给放了?就是说,把计数减一。
当然我估计有另一个方法,就是我在Boss里面写个函数释放资源,然后在线程join之后调动。但是我现在就想知道,Arc<Mutex>这个成员怎么释放掉。
--
FROM 72.197.247.*