`RefCell` 无法在线程之间安全共享?

2023-11-26

这是一个延续如何在 Rust 的闭包内重用外部作用域的值?,为了更好的呈现,开通了新的Q。

// main.rs

    // The value will be modified eventually inside `main` 
    // and a http request should respond with whatever "current" value it holds.
    let mut test_for_closure :Arc<RefCell<String>> = Arc::new(RefCell::from("Foo".to_string()));

// ...

    // Handler for HTTP requests
    // From https://docs.rs/hyper/0.14.8/hyper/service/fn.service_fn.html
    let make_svc = make_service_fn(|_conn| async {
        Ok::<_, Infallible>(service_fn(|req: Request<Body>| async move {
            if req.version() == Version::HTTP_11 {
                let foo:String = *test_for_closure.borrow();
                Ok(Response::new(Body::from(foo.as_str())))
            } else {
                Err("not HTTP/1.1, abort connection")
            }
        }))
    });

不幸的是,我得到RefCell<std::string::String> cannot be shared between threads safely:

enter image description here


RefCell 仅适用于单线程。您将需要使用类似但适用于多线程的互斥体。您可以在这里阅读有关互斥体的更多信息:https://doc.rust-lang.org/std/sync/struct.Mutex.html.

下面是将 Arc> 移动到闭包中的示例:

use std::sync::{Arc, Mutex};

fn main() {
    let mut test: Arc<Mutex<String>> = Arc::new(Mutex::from("Foo".to_string()));

    let mut test_for_closure = Arc::clone(&test);
    let closure = || async move {
        // lock it so it cant be used in other threads
        let foo = test_for_closure.lock().unwrap();
        println!("{}", foo);
    };
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

`RefCell` 无法在线程之间安全共享? 的相关文章

随机推荐

  • Facebook 登录注销在尝试再次登录时出现无效密钥哈希错误

    我有一个简单的 Facebook 登录 注销活动 运行成功 然而 在我从应用程序注销后 我尝试再次登录 但 facebook 给出了无效的密钥哈希错误 请注意 我第一次登录并注销成功 但在我注销并尝试再次登录后 Facebook 给出了该错
  • jQuery 滚动到 Div

    我正在制作一个常见问题解答页面 顶部有按钮可以跳转到某个类别 它会跳转到p我用作类别标签的标签 例如 p 对于我的一般类别 我不想直接跳到类别 而是想添加滚动效果 我想要类似的东西http www dynamicdrive com dyna
  • Dplyr summarise_each 聚合结果

    我有一个这样的数据框 metric1 metric2 metric3 field1 field2 1 1 07809668 4 2569882 7 1710095 L S1 2 0 56174763 1 2660273 0 3751915
  • 使用 python 和 eyes3 创建新的 ID3 标签

    我有一堆根本没有 ID3 标签的 mp3 文件 我正在尝试使用 eyed3 向文件添加 ID3 标签 但不知道使用什么方法 这是我的代码 import eyed3 file eyed3 load test mp3 file tag arti
  • Android - Activity 构造函数与 onCreate

    据我了解 安卓Activities有特定的生命周期onCreate应该被覆盖并用于初始化 但是构造函数中到底发生了什么 是否存在您可以 应该覆盖的情况Activity构造函数也是如此 或者你永远不应该碰它 我假设构造函数永远不应该被使用 因
  • Socket Java 客户端 - Python 服务器

    我正在尝试实现一个 java python 客户端 服务器套接字 客户端是java写的 服务端是python写的 Java客户端 import java io import java net import java lang public
  • AS3:定义命中区域

    我有一个包含位图的影片剪辑 我不想增加命中区域 我知道我可以在它后面添加一个透明形状 但这将通过 ios 的空气进行编译 我不想导致不必要的重绘 有没有办法将矩形定义为点击区域或其他解决方案 有一个特殊的 hitArea 字段用于此目的 c
  • ASP.net 通过内容页访问母版页变量

    我有一个母版页 然后我有一个公共变量 public partial class AdminMaster System Web UI MasterPage protected bool blnShowDialogue false In my
  • Swift 4 上的条形码

    我正在尝试将 mi 应用程序升级到 swift 4 但条形码读取器无法工作 我已经隔离了条形码读取器代码 但仍然无法工作 相机可以工作 但无法检测到条形码 该代码在 swift 3 iOS 10 上运行得很好 这是完整的代码 import
  • 安装 gem 给出“无法构建 gem 本机扩展。”

    I did sudo apt get install ruby ruby dev 我跑 sudo gem install jekyll 但它给出了这个输出 构建本机扩展 这可能需要一段时间 错误 错误 安装 jekyll 错误 无法构建 g
  • 列表中的元素对

    我想转换 1 2 3 4 to 1 2 2 3 3 4 or 1 2 2 3 3 4 在 Clojure 我有 partition 2 1 1 2 3 4 我怎样才能在哈斯克尔做到这一点 我怀疑标准api中有这样的功能 但我找不到它 标准技
  • 字节顺序标记搞砸了 Java 中的文件读取

    我正在尝试使用 Java 读取 CSV 文件 某些文件可能在开头有字节顺序标记 但不是全部 如果存在 字节顺序将与第一行的其余部分一起读取 从而导致字符串比较出现问题 当字节顺序标记存在时 是否有一种简单的方法可以跳过它 EDIT 我已经在
  • PHP中try-catch的性能

    在 php 5 中使用 try catch 语句时需要考虑哪些性能影响 我之前在网上读过一些关于这个主题的旧的 看似相互矛盾的信息 我目前使用的许多框架都是在 php 4 上创建的 缺乏 php 5 的许多优点 因此 我自己在 php 中使
  • Linux/Qt/C++下如何检测USB设备断开

    我正在编写一个系统 X Platform Windows Linux 该系统使用 FTDI USB 芯片与自定义设备进行通信 我使用他们的 D2XX 驱动程序进行设备打开 关闭 读 写 到目前为止 一切都很好 我需要知道设备何时断开连接 以
  • 如何将 C# 代码编译为库而不是可执行文件?

    我在 Visual Studio 2010 中有一个 C 控制台应用程序 它有一个 Main 方法以及一堆实用程序类 我希望这些实用程序类可用于其他解决方案 从网上阅读看来我需要将其编译为类库 DLL 这就是我所做的 进入 Visual S
  • Laravel JSON 响应不带反斜杠

    我正在使用 AJAX 将数据发送到我的控制器 PHP代码 return response gt json request gt root summer uploads store 它返回 http domain test summer up
  • 为什么我无法使用 JQuery .html 添加

    为什么这段代码有效 div error container html div class error No more foo allowed div 但这段代码会导致错误 div error container html div class
  • Log4j2:SMTPAppender 不发送错误或致命级别的邮件

    我发现 log4j2 中的 SMTPAppender 有一些问题 每当记录具有以下级别的事件时error or fatal被创建without举办具有级别的活动info在没有邮件发送并且致命事件消失之前 这是我的 log4j2 配置文件 l
  • 如何将这些 SQL SELECT 查询合并到一个 SELECT 语句中

    如何将这两个 select 语句合并到一个查询中 SELECT SUM incidents AS fires neighborhoods AS fire neighborhoods FROM SELECT FROM fires 2009 i
  • `RefCell` 无法在线程之间安全共享?

    这是一个延续如何在 Rust 的闭包内重用外部作用域的值 为了更好的呈现 开通了新的Q main rs The value will be modified eventually inside main and a http request