当前位置: 首页 > 知识库问答 >
问题:

如何创建包含std::atomic的std::pair?

龙高超
2023-03-14

我不知道如何创建以下内容:

std::pair<std::atomic<bool>, int>

我总是得到

/usr/include/c/5.5.0/bits/stl_对。h:139:45:错误:使用已删除的函数'std::atomic::atomic(const std::atomic

我已经试过了

std::pair<std::atomic<bool>, int> pair = std::make_pair(true, 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair({true}, 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair(std::atomic<bool>(true), 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair(std::move(std::atomic<bool>(true)), 1); //doesn't work

我知道std::atomic是不可复制的,那么你应该如何创建一对呢?难道这不可能吗?

共有1个答案

丰誉
2023-03-14

你可以做:

std::pair<std::atomic<bool>, int> p(true, 1);

这将使用true初始化原子的第一个成员,而不需要任何额外的拷贝或移动。在C17中,保证拷贝省略还允许您编写:

auto p = std::pair<std::atomic<bool>, int>(true, 1);
 类似资料:
  • 我知道是一个原子对象。但是原子化到什么程度呢?据我所知,操作可以是原子的。使一个对象原子化到底是什么意思?例如,如果有两个线程同时执行以下代码: 那么整个操作(例如)是原子操作吗?还是对变量atomic(so)进行了更改?

  • 虽然我不得不承认,我并不完全理解内存顺序的不同松弛语义的正式定义,但我认为顺序一致的顺序非常简单,因为它保证了“存在一个单一的总顺序,其中所有线程都以相同的顺序观察所有修改”。对我来说,这意味着用默认内存顺序STD::MEMORY_ORDER_SEQ_CST加载STD::Atomic::还可以充当内存栅栏。“顺序一致的排序”下的以下陈述进一步证实了这一点: 在所有多核系统上,完全顺序排序需要一个完

  • 我试图创建一个查找表,以便轻松创建具有不同值的对象。为此,我需要在类中使用一个静态std::数组填充数据。目前看起来是这样的: 它工作正常,如果我删除std::字符串,但与std::字符串我得到编译错误

  • 我需要弄清楚lock和condition_variable是如何工作的。 在这里略有修改的cplusplusreference代码中 我感到困惑的是,如果worker_thread已经锁定了互斥体,主线程如何锁定它。 我不明白为什么在这种情况下会出现“运行时错误”。

  • 问题内容: 我正在使用SWIG从Java访问C ++代码。 公开非常量引用传递的std :: string参数的最简单方法是什么? 我有参考暴露为Java数组传递原语,感谢typemaps.i,和s ^暴露,感谢std_string.i。但是非const std :: string&被公开为不透明指针类型。 当前: 期望的: 更新 :我找到 了 解决方案,如下所述。但是,它花费了超过几秒钟的时间。

  • 下面的代码显示了我要做的: