如何冻结一个线程并从另一个线程通知它?

2024-03-26

我需要暂停 Rust 中的当前线程并从另一个线程通知它。在Java中我会写:

synchronized(myThread) {
    myThread.wait();
}

并从第二个线程(恢复主线程):

synchronized(myThread){
    myThread.notify();
}

在 Rust 中可以做同样的事情吗?


使用发送类型的通道()可能是最简单的:

use std::sync::mpsc::channel;
use std::thread;

let (tx,rx) = channel();

// Spawn your worker thread, giving it `send` and whatever else it needs
thread::spawn(move|| {
    // Do whatever
    tx.send(()).expect("Could not send signal on channel.");
    // Continue
});

// Do whatever
rx.recv().expect("Could not receive from channel.");
// Continue working

The ()类型是因为它实际上是零信息,这意味着很明显您只是将其用作信号。事实上,它的大小为零意味着它在某些情况下也可能更快(但实际上可能不会比正常的机器字写入快)。

如果你只是需要通知程序有一个线程done,你可以抓住它的加入守卫并等待它加入。

let guard = thread::spawn( ... ); // This will automatically join when finished computing

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

如何冻结一个线程并从另一个线程通知它? 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 如何调用为 &str 实现的关联函数?

    我正在尝试写一个自定义Deserialize可以对我的枚举执行不区分大小写的反序列化的实现 use serde Deserialize Deserializer 1 0 120 use serde json 1 0 61 derive De
  • 无锁算法真的比全锁算法性能更好吗?

    陈雷蒙德 http blogs msdn com b oldnewthing 一直在做一个huge http blogs msdn com b oldnewthing archive 2011 04 15 10154245 aspx ser
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 向无锁队列添加阻塞函数

    我有一个基于循环缓冲区的无锁多生产者 单消费者队列 到目前为止 它只有非阻塞push back and pop front 来电 现在我想添加这些调用的阻塞版本 但我想尽量减少这对使用非阻塞版本的代码性能的影响 也就是说 它不应该将它们变成
  • 并发访问且不受数据结构的影响

    问题是这样的 我有一个包含 500 个指针的数组 它们指向双向链表中的 500 个元素 有 10 个并行运行的线程 每个线程运行 50 个循环 并尝试释放列表中的某些元素 该列表已排序 包含简单整数 并且有 10 个其他线程并行运行 搜索包
  • 为什么使用 reqwest 下载的 PNG 图像的字节与使用 Python 下载的不同?

    我正在尝试使用 reqwest 库来下载 PNG 文件 但是当我下载它时 我看到了其他编程语言的奇怪行为 例如 Python 例如 let content reqwest get https www google es images sea
  • Rust 柴油有条件过滤查询

    我正在尝试在一个项目中使用柴油 并且我想要一个 可过滤 类型 这个想法是你可以去 api foo id 10 bar 11它会返回一个结构体Foo struct Foo id Option
  • 如何使用 c++11 CAS 实现 ABA 计数器?

    我正在基于此实现一个无锁队列算法 http www cs rochester edu research synchronization pseudocode queues html 它使用计数器来解决 ABA 问题 但我不知道如何用c 11
  • 在 std::thread 创建的线程中调用 pthread_sigmask 是一个好习惯吗?

    1 我是 std thread 的新手 我想知道调用是否是一个好的做法pthread sigmask 阻止某些信号特别的线程创建者std thread 我不希望新线程接收SIGTERM SIGHUP等信号 因为主进程已经安装了这些信号的处理
  • 在 Haskell 中创建 100 万个线程需要多长时间?

    据我了解 Haskell 有绿色线程 但它们的重量有多轻 是否可以创建100万个线程 或者 100 000 个线程需要多长时间 from here http www reddit com r programming comments a4n
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • 使用多线程并行化 Java 中的 for 循环

    我对java很陌生 我想使用执行器服务或使用java中的任何其他方法并行化嵌套for循环 我想创建一些固定数量的线程 这样CPU就不会完全被线程占用 for SellerNames sellerNames sellerDataList fo
  • Linux/POSIX:为什么 fork() 不分叉*所有*线程

    众所周知 POSIX下创建新进程的默认方式是使用fork 在 Linux 下 这在内部映射到clone 我想知道的是 众所周知 当一个人打电话时fork 子进程是用单个线程创建的 调用的线程fork cf https linux die n
  • 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库

    相关这个问题 https stackoverflow com questions 1082554 我想把数据加载放在后台 但是 我收到 库例程调用不按顺序 错误 In 这个所以线程 https stackoverflow com quest
  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 返回“!”是什么意思?铁锈中的意思是什么?

    最近我在 Rust 中发现了一个返回的函数 而不是基本类型 如下所示 fn my function gt 这是什么意思 我无法在中找到有关此的信息锈迹斑斑的书 https doc rust lang org book 该函数使用此类指标返回
  • 无法从自生成线程访问 FacesContext.getCurrentInstance()

    无法在自生成线程中获取 FacesContext getCurrentInstance 需要根据后端进程动态更新组件 通过创建一个线程来监视进程并回调组件更新以及 p poll 来实现相同的效果 但是 似乎 FacesContext get
  • 多线程中的 OpenCV CascadeClassifier C++ 接口

    我想在多个线程中使用 CascadeClassifier 对象运行 OpenCV C 接口 我的程序的工作方式是我的主线程将 some file xml 加载到 CascadeClassifier 对象中 生成三个或更多线程并向它们传递级联

随机推荐

  • 如何使用node.js从蓝牙设备接收数据

    我是 javascript 和 node js 的新手 目前从事医疗项目 首先我将解释我的工作 我必须从蓝牙设备接收数据 正常血压率 脉搏率 并使用 node js 在 Web 应用程序中显示读数 我不知道如何从蓝牙设备 病人监护仪 接收数
  • 管理用户对 ASP.NET 中页面的访问

    我正在使用 MembershipProvider 目前有 3 个角色 用户 超级用户 管理员 另外 我还有只有管理员和超级用户才能看到的页面 对于这些页面 我使用 Web 配置中的配置
  • 如果第一个“return”之后有一个“else”,那么性能是否重要?

    我现在看到了两种不同的方法来创建布尔返回方法 bool Case1 if A return true else return false bool Case2 if A return true return false 哪一个更快 不写还有
  • Symfony2:动态生成嵌入表单

    Symfony2 有可能表格动态生成 http symfony com doc current cookbook form dynamic form modification html cookbook form events submit
  • 八叉树邻居搜索

    我有一个八叉树 它存储基于体素的流体 当我模拟流体时 我需要访问当前节点周围的叶子 如何实现这样的搜索 您可以假设该节点存储了一个指向其父节点的指针 也许还需要其他数据 假设每个八叉树节点还保存其在八叉树中的 3D 索引 1 及其深度 生成
  • kube proxy日志无法打开服务Nodeport

    服务类型 节点端口 问题 无法访问 clusterIP Nodeport 并找到 kube proxy pod 日志 如下所示 无法打开端口 跳过它 err listen tcp4 32060 bind 地址已在使用中 port Descr
  • 当我尝试通过 CLI 部署 Azure 云服务时,“对象引用未设置为对象的实例”

    我在 Azure PowerShell 中运行以下命令来部署我的节点项目 Publish AzureServiceProject ServiceName
  • 移动没有历史记录的 Subversion 存储库

    有很多关于使用版本历史记录移动 Subversion 历史记录的帖子 但我想做一些不同的事情 基本上 我们有一个已用作概念证明的存储库 我们希望将其存档 然而 我们想要创建一个新的存储库 其中包含一些代码的最新版本 但保存了作者历史记录 但
  • 使用 ref 并拥有 ProxyComponent 时如何访问实际组件

    我们有一个对 React 组件的引用 并且想要调用该组件的方法 当使用 ref 时 它是一个 ProxyComponent 对象 我如何将它用作我的实际组件 或者如何才能做到这一点 我看到 有属性 renderedElement 并且在属性
  • 如果选择“图像/文件”,Laravel 会验证字段吗?

    我有一个 图像 字段 类型是file并且只需要验证是否选择了图像 这意味着它也可以为空 我试过这样 avatar gt mimes jpeg jpg png gif max 100000 但这也是必需的 我仍然尝试使用参数present a
  • EF 4.3.1 与 VS 2011

    我需要知道是否可以开始在 VS 2011 中使用最新版本的 EF 4 3 1 而无需按照所述安装这些 CTP 组件here http blogs msdn com b adonet archive 2011 06 30 announcing
  • postgis如何处理使用不同SRID发送的坐标

    我正在运行 django 应用程序 并且我正在为我的数据库使用 PostGis 扩展 我试图更好地了解发送坐标时幕后发生的情况 特别是因为我正在使用转换为不同 SRID 的不同坐标系 我的问题有三个 在数据库中创建点或多边形时 django
  • 使用 pytest 在子文件夹中进行测试

    我正在使用 python pytest 来运行我的单元测试 我的项目文件夹是 Main 包含数据文件 A txt Main Tests 我运行 pytest 的文件夹 Main Tests A test 包含测试文件的文件夹 A test文
  • 如何使用 printf 制作“进度条”? [复制]

    这个问题在这里已经有答案了 许多命令行工具都实现基于文本的进度条 就像rpm安装一样 安装 45 the 随着百分比增长 同时保持在单行 我想要的是类似的东西 我需要一个进度指示器只占一行 也就是说 当百分比增长时 它被覆盖 而不是创建一个
  • pandas groupby 转置 str 列

    这就是我想做的 gt gt gt import pandas as pd gt gt gt dftemp pd DataFrame a 1 3 2 3 b a a b c d e split a b 0 1 a 1 1 a 2 1 b 3
  • Laravel 5 获取视图名称

    我正在努力获取 L5 中的视图名称 就像在 WP 中一样 我想添加特定的页面名称 视图名称 用于样式 如下所示 div class page login h1 Inloggen h1 div div class page register
  • 如何使用javascript检查网页中是否加载了Font Awesome?

    我需要检查网页中是否有 Font Awesome 如果没有 我将用 javascript 加载它 有点像 facebook sdk 检查是否存在包含 id facebook jssdk 的脚本元素 如果是 则返回 不执行任何操作 如果不存在
  • 如何使用 api 创建 PointField?

    我正在使用 django rest framework 作为 API 但是当我发出发布请求时 会向我发送以下错误 location Invalid format string or unicode input unrecognized as
  • 使用 rc.local 运行脚本:脚本有效,但在启动时无效

    我有一个需要在启动时启动的 node js 脚本and在 www data 用户下运行 在开发过程中 我总是以以下方式开始脚本 su www data c node var www php jobs manager js 我确切地看到发生了
  • 如何冻结一个线程并从另一个线程通知它?

    我需要暂停 Rust 中的当前线程并从另一个线程通知它 在Java中我会写 synchronized myThread myThread wait 并从第二个线程 恢复主线程 synchronized myThread myThread n