c++ 11中使用Atomic的连续的、不同的序列
Consecutive, distinct sequences in C++ 11 using Atomic
关于原子我有两个问题:
1)以下代码是否保证在多线程设置中返回连续的、单调递增的序列而不重复?
#include <atomic>
struct AtomicCounter {
std::atomic<int> value;
AtomicCounter() : value( 0 ) {}
int getNextSequence(){
return ++value;
}
};
2)是否有更简单的初始化方法?这些都不起作用:
std::atomic<int> value ( 0 ) ;
std::atomic<int> value { 0 } ;
std::atomic<int> value=0;
Thanks in advance
- 是的,即使在并发环境中,您也将获得没有间隙或重复的序列。"单调递增"意味着调用方的顺序——从某种意义上说,要定义事件发生的先后顺序,就需要定义事件发生的先后顺序。例如,不能保证在几个并发线程中首先发起调用的线程一定会得到较小的值。
-
atomic<int> value {0};
是正确的语法(演示)。然而,并不是所有的c++编译器都支持c++ 11的非静态数据成员初始化项,所以使用c++ 98的初始化项列表可能是目前唯一可用的方法。
这里是c++ 11特性列表的链接,由不同的编译器实现。
-
是的。
-
你不能在类体内这样初始化,你需要使用当前使用的初始化列表语法。
相关文章:
- 模板元程序查找相似的连续类型名称
- EASTL矢量<向量<int>>连续的
- 当需要超过16GB的连续内存时,内存分配失败
- 我应该如何表示我拥有的连续元素序列?
- 蛇在C++不会连续转两次
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 如何知道n!是否可以表示为三个连续数字的乘法?
- 连续枚举 C++11
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 可以将两个相同类型的连续数组视为一个数组吗?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- std::stack 是连续的吗?
- 检查连续对的字符串C++
- 如何使用 fprintf 将连续的 512 字节保存到文件中
- 使用连续字符及其路径查找矩阵中最长路径的长度
- 是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?
- 向量的内存位置不连续
- 查找给定范围内最长连续 1 的频率