我在互斥体中有一个 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"))?;