在 c++11 中将原子与 std::thread 一起使用

2024-01-15

我有一个线程,我想让它处于循环中,直到我准备好退出程序,此时我希望它跳出循​​环并退出,以便我可以调用std::thread::join在上面。在 c++03 时代,我只会使用受锁保护的 bool 来告诉线程何时退出。这次我想我会利用新的原子库(特别是std::atomic_bool),但我遇到了麻烦。下面是我的测试用例:

#include <atomic>
#include <thread>
#include <cstdio>

using namespace std;

void setBool(atomic_bool& ab)
{
    ab = true;
}

int main()
{
    atomic_bool b;
    b = false;
    thread t(setBool, b);
    t.join();
    printf("Atomic bool value: %d\n", b.load());
    return 0;
}

的声明thread t吐出this http://pastebin.com/SpRQW4W1当我尝试编译时,这是一个怪物。错误的中心部分似乎是:

从“std::atomic_bool”类型的右值对“std::atomic_bool&”类型的非常量引用进行无效初始化

为什么我无法获得对atomic_bool?我该怎么办?


您必须明确地将引用传递给您的线程。使用std::ref将创建一个std::reference_wrapper它是可复制的并将引用传递给您的函数。

thread t(setBool, std::ref(b));

否则它会尝试复制你的原子,这是不可复制的。

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

在 c++11 中将原子与 std::thread 一起使用 的相关文章

  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • iPhone SDK - 在后台线程中运行重复进程

    我有一个iPhone我想在其中每隔一段时间在后台执行一个方法的应用程序1第二 所以在我的主线程中 我有以下代码UIViewController viewDidLoad NSTimer timerWithTimeInterval 1 0 ta
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • AccessViolationException 未处理

    我正在尝试使用史蒂夫 桑德森的博客文章 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc 2 style 为了在我的 ASP
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • 在 SQL Server 中存储大量 XML 类型数据的最佳实践

    是否有人可以分享有关在 SQL Server 2008 中存储 XML 字段类型数据的最佳实践 我们有很多小型 XML 结构 但也有一些较大 gt 50MB 我们发现删除时速度有点慢 任何建议 战争故事将不胜感激 我发现到目前为止大多数答案
  • SELECT 语句中有多个条件?

    首先 我没有 ABAP 经验 我在这里只是猜测 我想向现有报表中的 SELECT 添加条件 现有代码如下所示 SELECT SINGLE FROM EKPO WHERE EBELN GT MSEG EBELN AND EBELP GT MS
  • 更改PostgreSQL 9.6中某种数据类型表中的所有列

    似乎几个月前我遇到了一个涉及此问题的问题 但现在我似乎找不到了 基本上 我想做两件事 首先 制作了许多表格 其中有几列numeric 20 2 我想把它们全部改为numeric 对于一列来说 该语句很简单 ALTER TABLE table
  • 如何更改 Visual Studio Code 中的 UI 语言?

    如何更改 UI 语言视觉工作室代码 https code visualstudio com 1 0 于 2016 年 4 月发布 打开VScode 按 F1 并输入 显示 选择 配置显示语言 选择你的语言 上面是已安装的语言 下面是其他语言
  • 如何用Java连接MySQL?

    我已经安装了MYSQL服务器5 1 然后我安装了 mysql connector java 3 0 8 stable bin jar 并将其放入驱动器 c 中 文件夹 core 为 C core 然后在计算机的属性中 我创建带有变量名 CL
  • Three.js 鼠标滚轮用于向上/向下移动相机而不是放大/缩小

    你怎么做到这一点 我使用创建了一个场景三 js编辑器 https threejs org editor 并使用 发布 选项下载该项目 我编辑了 app js 文件以导入 OrbitControls 因此现在我可以使用鼠标滚轮 或者在我的情况
  • 从 pod minikube kubernetes 中的容器公开端口

    我是 K8s 新手 我将尝试使用以下命令在 pod 中运行 2 个容器的 minikube kubectl apply f deployment yaml 和这个deployment yml apiVersion v1 kind Pod m
  • 将图像从图像控件存储到 StorageFile

    如何从 Windows 应用商店应用程序中的图像控件将图像存储到 StorageFile 中 我正在使用以下链接 但这对我来说没有用 StorageFile file await StorageFile CreateStreamedFile
  • 当 Perl 内存不足时,是否有标准的行为方式?

    Perl 解释器 又名 perl 在内存不足时是否有标准的行为方式 是否以任何方式记录 指定 以某种统一的方式编码 我对任何表示为正在运行的 Perl 代码契约的标准特别感兴趣 例如 将die叫做 将要END块被执行 ETC 我对这两个 理
  • 如何使discord.py中的数据以表格形式显示?

    您好 我正在创建一个可以制作积分表 排行榜的机器人 下面是效果非常好的代码 def check ctx return lambda m m author ctx author and m channel ctx channel async
  • Angularjs:如何将范围变量传递给指令?

    我正在尝试使用指令创建多个标签并将其附加到 div 如下所示 module directive createControl function return function scope element attrs console log a
  • 在 R 中添加进度条以复制功能

    我在用replicate经营我自己的analyse函数多次 analyse返回一个列表 results lt replicate reps analyse 有没有办法添加进度条 显示当前完成的复制百分比 我尝试过txtProgressBar
  • 如何自定义 chrome devtools elements 面板上的右键单击

    devtools 元素面板右键单击 https i stack imgur com sufm3 png 看上面的图片 右键单击任何节点都会显示选项菜单 例如 添加属性 和 编辑属性 等 我希望能够扩展右键菜单来添加自定义事件 例如 我需要获
  • 使用 gsub 从字符串中删除模式

    我正在努力删除字符串中下划线之前的子字符串 我想使用 通配符 作为下划线之前的位可以变化 a lt c foo 5 bar 7 a lt gsub a perl TRUE 结果应该如下所示 gt a 1 5 7 我也尝试过类似 or 但并没
  • android:如何在折叠工具栏中添加带有文本的按钮

    如何实现如下布局 我可以在没有添加按钮的情况下实现 但是如何添加ADD按钮和添加按钮在向上滚动时应该随着图像的视差而消失 我发现浮动操作按钮无法添加文本 我必须只使用按钮 我的 xml 布局没有添加按钮
  • 创建 HTML5 画布图案并用它们填充内容

    我有困难 createPattern image repeat 我可以用我自己创建的图案填充一个正方形吗 toDataURL and createPattern 我可以用当前画布上的图案填充一个正方形吗 var canvas documen
  • 您最喜欢的低级代码优化技巧是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 实体框架 6.0 和 Microsoft.Data.SqlClient

    我们正在将本地数据库迁移到 Azure 我们的应用程序使用实体框架 6 安装 ADALSQL dll 后 使用 System Data SqlClient 使用身份验证 Microsoft Active Directory 密码一切正常 当
  • 如何在 Android 7.1.1 上将图像文件共享到 WhatsApp 和 Viber?

    背景 类似于我最近在共享 打开 APK 文件时遇到的问题 here https stackoverflow com q 41160353 878126 here https stackoverflow com q 41085950 8781
  • 在 c++11 中将原子与 std::thread 一起使用

    我有一个线程 我想让它处于循环中 直到我准备好退出程序 此时我希望它跳出循 环并退出 以便我可以调用std thread join在上面 在 c 03 时代 我只会使用受锁保护的 bool 来告诉线程何时退出 这次我想我会利用新的原子库 特