替换借用的变量[重复]

2023-12-06

我有一桶需要积累价值的对象。它受到保护RwLock,因此我也保留它的写锁。我想在该过程期间保留单个写锁。

例如:

use std::sync::RwLock;

fn main() {
    let locked = RwLock::new(Vec::<u32>::new());

    // this is the entry point for real-world code
    let mut writer = locked.write().unwrap();    

    // copy into 'locked' until it is full (has 4 items)
    for v in 0..100 {
        if writer.len() > 4 {
            // discard 'writer' and 'locked', create anew
            locked = RwLock::new(Vec::<u32>::new());
            writer = locked.write().unwrap();
        }
        writer.push(v);
    }
}

虽然我的示例对固定数据进行操作,因此似乎不需要RwLock无论如何,真实代码将在“真实代码”处进入,并且不一定在“真实代码”的边界上退出locked变得“饱满”。

我如何创建一个新的locked and writer需要时提出反对,而借用检查员不同意?


I agree 与大卫·格雷森,没有明显的需要重新创建RwLock。假设您在填充后需要向量,请使用mem::replace关闭Vec:

use std::sync::RwLock;
use std::mem;

fn main() {
    let locked = RwLock::new(Vec::<u32>::new());
    let mut writer = locked.write().unwrap();    

    for v in 0..100 {
        if writer.len() > 4 {
            let old_vec = mem::replace(&mut *writer, Vec::new());
        }
        writer.push(v);
    }
}

如果您不需要Vec,然后只需调用Vec::clear.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

替换借用的变量[重复] 的相关文章

随机推荐

  • 如何应用 CSS 进行打印?

    我正在尝试在我的页面之一中打印 div 但打印时无法应用 css 在样式标签内写入 media print 不起作用 我应该怎么办 使用以下
  • Java 泛型和 Groovy 重载

    我使用 Groovy JUnit 和 EasyMock 为 Java 应用程序编写单元测试 EasyMock中有几个重载方法capture 已弃用 并附有注释 由于强制擦除更困难 无法在 Java 7 中编译 这些方法将类型的对象作为参数C
  • data.table 聚合操作中的进度条

    ddply has a progress要在运行时获得进度条 是否有等效的data table in R 是的 您可以使用任何您想要的进度状态 library data table dt data table a 1 4 b c a b d
  • 一页上有两个分析

    如何在一个网站上放置两个 GA 代码 我有这个代码 function i s o g r a m i GoogleAnalyticsObject r i r i r function i r q i r q push arguments i
  • 将 NSDictionary 键排序为 NSDate

    我正在使用最新的 SDK 和 XCode 4 2 开发 iOS 4 应用程序 我有一个NSMutableDictionary where keys are NSDate and values are NSMutableString 当我填满
  • 如何在Android上设置语音识别的语言?

    我一直在android中研究语音识别API 发现当语言设置更改时 语音结果会发生变化 有没有办法以编程方式设置它 或者是否打算在语音语言设置屏幕上午餐 或者还有什么 笔记 我尝试额外使用这个意图 intent putExtra Recogn
  • c++ 如何转发声明一个继承自另一个类的类?

    我创建了一个具有一堆继承类 父类 的类 以便我可以使用多态性 但问题是有两个类相互调用 因此 我需要转发声明它们 并且我可以转发声明一个类 但是当我转发声明继承的类时 编译器表示它无法将指针从一个类更改为另一个类 有没有办法对继承的类进行前
  • 根据表单中的多个列表框过滤查询

    我有一个包含两个表的 Access 数据库 联系人 和 国家 地区 其中每个都包含多个字段 我有一个查询 Filter 它将这两个表组合在一起 我想创建一个表单 其中的列表框数量与查询中的字段数量一样多 用户可以打开表单并从每个列表框中选择
  • 我可以创建一个 XSD 架构来为所有复杂类型放置一个属性吗?

    我想创建一个 XSD 来定义一个属性 该属性可以放置在其他架构中的元素或不属于任何架构中的元素上 例如 架构看起来像这样
  • java流中遇到顺序保存

    我已经经历过相关问题 例如如何确保java8流中的处理顺序 我仍然不完全清楚输出元素的顺序 因此请澄清我以下的疑问 Integer intArray 1 2 3 4 5 6 7 8 List
  • 您是否需要两个表单字段来与 HTML 匹配?

    有没有办法要求两个表单字段中的条目使用 HTML 进行匹配 或者这仍然需要用 JavaScript 来完成 例如 如果您有两个密码字段 并且想要确保用户在每个字段中输入了相同的数据 是否可以使用一些属性或其他编码来实现此目的 不完全是 HT
  • 强制在 Android 上的 Soundcloud 应用程序中打开 Soundcloud 曲目

    我有一个链接到 Soundcloud 曲目的移动应用程序 在 Android 上 单击这些链接会弹出一个对话框 要求用户 使用浏览器或 Soundcloud 应用程序完成操作 有没有办法绕过这个屏幕 只在 Soundcloud 播放器中播放
  • 如何使用 2 组件选择器和文本字段输入在 Xcode 中编写计算代码

    我正在尝试对 iPhone iPad 屏幕进行编码 该屏幕根据文本字段中输入的内容以及 2 组件选择器中选择的内容输出值 我已经完成了基础知识 直到显示输入 选择的数据为止 但缺少执行计算 我搜索了我能找到的所有资源 并利用了我找到的所有相
  • MATLAB 排除超出 1 个标准差的数据

    我对 MATLAB 缺乏经验 很抱歉新手问题 我有一个大向量 905350 个元素 其中存储了一大堆数据 我有标准差和平均值 现在我想删除高于 低于平均值一个标准差的所有数据点 我只是不知道怎么做 根据我收集的信息 我必须做某种双循环 就像
  • 如何删除mongodb中的数组元素?

    这是数组结构 contact phone number 1786543589455 place New Jersey createdAt number 1986543589455 place Houston createdAt 这里我只知道
  • 导入错误:没有名为 PyMesh 的模块

    我已经尝试安装pymesh在 Mac OS 和 Windows 上 通过下载源代码并使用python setup py install 如中所述https github com qnzhou PyMesh 在这两种情况下 当我运行测试代码时
  • 将托管 dll 注入本机进程

    我正在尝试将托管 c dll 注入本机可执行文件中 我将以下代码注入到可执行文件中以加载 CLR 我知道注入有效 因为当我将代码注入 cmd exe 时 它 会正确输出 我知道CLRCreateInstance pMetaHost gt G
  • 反转音频文件 Swift/Objective-C

    有没有办法可以反转并导出 m4a 音频文件 我找到了反转音轨的解决方案here 但它似乎只适用于 caf 文件格式 如果唯一的方法是使用 caf 是否有办法先将 m4a 文件转换为 caf Update In 另一个帖子我发现 AVAsse
  • 将 VBA 数组元素输出到 Excel 中的一个单元格

    所以我有一个 vba 代码 它创建一个包含多个元素的数组 我想将这些元素输出到 Excel 的一个单元格中 我能够将其元素输出到多个单元格 但更喜欢在一个单元格中输出 这可以做到吗 如果数组被声明为 String 或 Variant 那么你
  • 替换借用的变量[重复]

    这个问题在这里已经有答案了 我有一桶需要积累价值的对象 它受到保护RwLock 因此我也保留它的写锁 我想在该过程期间保留单个写锁 例如 use std sync RwLock fn main let locked RwLock new V