std::promise::set_value() 和 std::future::wait() 是否提供内存栅栏?

2023-12-12

如果我执行以下操作:

std::promise<void> p;
int a = 1;

std::thread t([&] {
  a = 2;
  p.set_value();
});

p.get_future().wait();

// Is the value of `a` guaranteed to be 2 here?

参考参数有这个要说的set_value(),但我不确定这意味着什么:

调用此函数不会与调用 get_future 引入数据竞争(但它们不需要彼此同步)。

Do set_value() and wait()提供获取/释放同步(或其他形式)?


从我的阅读中我相信a最后保证为2。请注意有关信息承诺本身(强调我的):

Promise 是 Promise-Future 通信通道的“推送”端:在共享状态中存储值的操作与等待共享状态的任何函数(例如 std::future::get)的成功返回同步(如 std::memory_order 中所定义)。否则,对同一共享状态的并发访问可能会发生冲突:例如 std::shared_future::get 的多个调用者必须全部是只读的或提供外部同步。

当然,我鼓励您阅读某些东西同步的含义。对于这种情况意味着set_value被视为线程间发生之前,因此从我所写的内容来看a是一个明显的副作用。你可以找到更多here.

你的报价是什么意思get_future?这意味着您可以安全地致电get_future and set_value来自不同的线程,它不会破坏任何东西。但它本身也不一定引入任何内存栅栏。唯一确定且安全的同步点是set_value from std::promise and get from std::future.

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

std::promise::set_value() 和 std::future::wait() 是否提供内存栅栏? 的相关文章

  • 如何检查图像对象与资源中的图像对象是否相同?

    所以我试图创建一个简单的程序 只需在单击图片框中更改图片即可 我目前只使用两张图片 所以我的图片框单击事件函数的代码 看起来像这样 private void pictureBox1 Click object sender EventArgs
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • 将数组向左或向右旋转一定数量的位置,复杂度为 o(n)

    我想编写一个程序 根据用户的输入 正 gt 负 include
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • Meteor.setTimeout 和 Meteor.methods 之间的并发

    在我的 Meteor 应用程序中实现回合制多人游戏服务器 客户端通过发布 订阅接收游戏状态 并且可以调用 Meteor 方法sendTurn将回合数据发送到服务器 他们无法直接更新游戏状态集合 var endRound function g
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问

随机推荐

  • iOS - swift 3 - DispatchGroup

    我创建了这个基本架构来处理我的网络事务 我想保持它的模块化和结构化 public class NetworkManager public private set var queue DispatchQueue DispatchQueue l
  • openfire 支持用户/联系人阻止吗?

    openfire 支持用户 联系人阻止吗 我正在创建一个基于 XMPP 的聊天 现在我希望我的用户拥有一个可以主动阻止某个人与他们聊天的工具 我知道 XMPP 已经定义了一个扩展 通信阻止 在隐私列表 XEP 0016 中定义 以及隐私列表
  • JdbcPagingItemReader 不适用于联接查询

    我有两个表表 1 和表 2 两者具有相同的名称id column 由于它是左外连接查询 因此我必须使用别名 在 sortKeys 中 如果我提到id 误差为 Caused by org postgresql util PSQLExcepti
  • 如何在不使用 Javascript 的情况下防止 .NET MVC 中的多个表单提交?

    我想防止用户在 NET MVC 中多次提交表单 我已经尝试了几种使用 Javascript 的方法 但很难让它在所有浏览器中工作 那么 如何在我的控制器中防止这种情况发生呢 是否有某种方法可以检测到多次提交 更新了 ASP NET Core
  • R Leaflet 离线地图图块未加载

    我需要帮助尝试找出为什么使用本地保存的地图图块的传单地图无法正常工作 我正在尝试重新创建示例here根据本地保存的地图图块创建传单地图 但是 当我创建它时 背景地图图块不会加载 我的代码基本上直接来自示例 但针对我的目录进行了更新 并更新以
  • Objective-C 构建中出现重复符号错误?

    当我按构建 调试时出现此错误 ld duplicate symbol objc class name BlogTableItemCell in Users fabian Development Workspaces iphone exper
  • 在 TBIMP 编辑的 dll 之后手动生成 ActiveX 包装器?

    我有几个需要从 C 项目访问的 ActiveX 组件 我可以通过 Visual Studio 的添加引用对话框导入它们 该对话框还将自动生成包装类 IE ABCLib and AxABCLib 我知道我可以通过运行手动生成主互操作程序集TL
  • C#:如何使用 IReadOnly 字典实现接口,其中包含来自包含具体值的具体字典的接口值

    在我的代码中 我声明内部类和公共接口 并且有一种情况 我想公开一个带有包含接口类型值的 IReadonlyDictionary 的接口 但我想用具有带有值的 Dictionary 的类来实现它具体类型 我需要这个 因为我正在将一些 JSON
  • 迁移到 Team Foundation Server

    我们有一台安装了 TFS 的新服务器 当前的环境非常平常 源代码使用SourceSafe 2005 进行管理 并与Visual Studio 2008 企业版集成 QA 团队正在使用 Bugzilla 来报告错误 首先是一些基本问题 我怎样
  • 使用 softmax 激活的二元分类始终输出 1

    对于问题的质量感到抱歉 但这里是初学者 我只是想用泰坦尼克号数据集试试运气 但它总是预测乘客死亡 我尝试解释下面的代码 import matplotlib pyplot as plt import numpy as np import pa
  • 如何在同一个类的另一个方法中调用一个方法的变量

    我正在尝试访问同一类的另一个方法中的方法的变量 但由于某种原因它什么也不打印 class Colors def blue self var This is blue def red self b self blue print b var
  • 来自非嵌套/同级目录的 Mercurial 子存​​储库?

    是否可以使用同级路径创建子存储库 Subversion 是我们 选择的 版本控制系统 但我已经遇到了一些过时提交的问题 对我来说 在 Hg 和 SVN 下双重版本我的文件要方便得多 而且我已经取得了巨大的成功 然而 我还有其他一些同事使用汞
  • CUDA:将相同的内存位置流式传输到所有线程

    这是我的问题 我有相当大的双精度数集 它是一个包含 77 500 个双精度数的数组 要存储在 cuda 中的某个位置 现在 我需要一大堆线程来顺序地对该数组执行一系列操作 每个线程都必须读取该数组的相同元素 执行任务 将结果存储在共享内存中
  • Android 打瞌睡模式和前台服务

    我在这里读到了很多关于打瞌睡模式的问题 比如安卓打瞌睡模式 Android N Doze 模式 如何保持后台下载和处理 唤醒和打瞌睡模式还有许多其他人 但在很多回复中 意见不一 我自己无法测试 模拟器不支持我的处理器 我唯一的测试设备是an
  • 可变参数宏中标记的串联

    在 C 中 是否可以将可变参数连接到可变参数宏中 例子 MY MACRO A B C will yield HDR A HDR B HDR C MY MACRO X Y will yield HDR X HDR Y 正常的 运算符对于可变参
  • XPath 测试节点值是否为数字

    如何使用 XPath 检查节点值是否为数字 有任何想法吗 测试该值NaN
  • 如何通过 Ecto Multi 从先前插入的表键中检索 id

    我想从之前由 Ecto Multi 插入的表主键中检索 id 首先 我插入到A主表中 那么B明细表需要A id 我尝试了以下代码 Multi new gt Multi insert insert main gt Multi insert a
  • 如何发送 HTML/CSS 电子邮件?

    大多数电子邮件客户端在读取 HTML 电子邮件 包括 Gmail 和 Hotmail 中的 CSS 时遇到问题 我经常使用此服务将 HTML CSS 转换为正确的电子邮件格式 以便用户端的一切看起来都正常 基本上它的作用是将所有 CSS 转
  • 在 JavaScript 中调用 MATLAB

    我是 JavaScript 新手 正在使用 JavaScript 编写一个简单的网页游戏来进行研究 人们可以玩游戏并收集一些数据 收集到的数据需要经过MATLAB处理 并将结果返回给JavaScript代码 JavaScript 代码将在客
  • std::promise::set_value() 和 std::future::wait() 是否提供内存栅栏?

    如果我执行以下操作 std promise