首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何关闭互斥体中的rusqlite连接?

如何关闭互斥体中的rusqlite连接?
EN

Stack Overflow用户
提问于 2022-03-10 03:28:05
回答 1查看 164关注 0票数 0

我在互斥体中有一个粗糙的连接。

如下所示:

代码语言:javascript
复制
struct MyStruct {
    connection: std::sync::Mutex<rusqlite::Connection>,
}

当我完成它时,我想关闭它,我试图这样做:

代码语言:javascript
复制
let lock_ro = mystruct.connection.lock().unwrap();
lock_ro.close()
.map_err(|e| e.1)
.with_context(|| format!("failed to close))?;

然而,我得到了这个错误:

errorE0507:无法脱离std::sync::MutexGuard<'_, rusqlite::Connection>的引用

并且:^移动是因为值的类型为rusqlite::Connection,它没有实现Copy特性。

如果我不能移动它,我怎么能关闭它?

EN

回答 1

Stack Overflow用户

发布于 2022-03-10 04:13:14

如果要在线程之间共享MyStruct,则可以将其存储为Option

代码语言:javascript
复制
struct MyStruct {
    connection: std::sync::Mutex<Option<rusqlite::Connection>>,
}

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

代码语言:javascript
复制
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"))?;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71418497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档