< 返回版块

cham-pin 发表于 2021-09-10 10:57

Tags:Tokio,runtime

  • rust初级使用者
  • 我在定义一个结构体, 其中一个成员为 pool: Arctokio::runtime::Runtime
  • 我希望在某个地方销毁这个pool, 使用 ** runtime.shutdown_timeout **
  • 但是上述会报错:
error[E0507]: cannot move out of an `Arc`
  --> kvstore/src/tikv.rs:57:17
   |
57 |                 pool.shutdown_timeout(Duration::from_millis(10));
   |                 ^^^^ move occurs because value has type `Runtime`, which does not implement the `Copy` trait

error: aborting due to previous error; 1 warning emitted

  • 能否帮我解决下问题, 多谢

评论区

写评论
joshua86z 2021-09-10 14:29

Arc<Mutex<Option>>

作者 cham-pin 2021-09-10 11:31
#[derive(Clone)]
pub struct TikvClient {
    pool: Arc<runtime::Runtime>,
}

impl TikvClient {
    pub fn new_client(pd_endpoints: Vec<String>){
        let pool = Arc::new(runtime::Builder::new_multi_thread()
                .enable_all()
                .worker_threads(1)
                .thread_name("tikv client thread")
                .build()
                .unwrap());

        self.pool.shutdown_background();
    }

}

  • pool.clone是不行的
  • 通过pool.handle()获取的Handle也不行
  • Arc::new的指针 如何释放呢
joshua86z 2021-09-10 11:19

shutdown 参数是self 说明要消耗自身 你arc传到别的线程消耗掉了 其它线程怎么办?

chenge 2021-09-10 11:06

pool = value.clone()

是不是可以这样?

最好贴出完整代码,探讨一下。

1 共 4 条评论, 1 页