如何在互斥锁中关闭 rusqlite 连接?

  • 本文关键字:rusqlite 连接 rust rusqlite
  • 更新时间 :
  • 英文 :


我在互斥体中有一个 rusqlite 连接

如下:

struct MyStruct {
connection: std::sync::Mutex<rusqlite::Connection>,
}

当我完成它时,我想关闭它,我尝试执行以下操作:

let lock_ro = mystruct.connection.lock().unwrap();
lock_ro.close()
.map_err(|e| e.1)
.with_context(|| format!("failed to close))?;

但是我收到此错误:

错误 [E0507]: 无法移出取消引用std::sync::MutexGuard<'_, rusqlite::Connection>

和:^^^^^^^ 移动发生,因为值具有类型rusqlite::Connection,它不实现Copy特征

如果我无法移动它,我该如何关闭它?

如果要关闭MyStruct线程时共享它,则可以将其存储为Option

struct MyStruct {
connection: std::sync::Mutex<Option<rusqlite::Connection>>,
}

因此,当您要关闭它时,您可以通过.take()获取该值的所有权,然后调用.close()

mystruct.connection
.lock()
.expect("lock should not be poisoned")
.take()
.expect("there should be a connection")
.close()
.map_err(|e| e.1)
.with_context(|| format!("failed to close"))?;

最新更新