调整 std::vector<std::atomic_bool> 的大小,为所有原子布尔值分配 true
Resize a std::vector<std::atomic_bool> assigning true to all atomic bools
i有一个我想调整到一些任意n
的std::vector<std::atomic_bool>
,其中所有新创建的对象都被分配为true的值。该程序不会构建,因为resize()
依赖于数据类型的复制构造函数,而不是其分配运算符。是否有任何方法可以将默认值分配给atomic_bool
,或者我会使用循环和store()
的所有值?
我尝试了什么:
#include <atomic>
#include <vector>
class foo() {
public:
std::vector<std::atomic_bool> vec;
foo() {
std::atomic_bool temp(true);
vec.resize(100, std::atomic_bool(true)); //try 1
vec.resize(100, temp); //try 2
}
}
如果T
既无法复制也不可移动,则无法调整std::vector<T>
。时期。在这种情况下,您可能需要考虑std::deque
。
std::deque<std::atomic_bool> D;
D.emplace_back(true); // write a helper to do this 100 times if you want
但是,请注意,原子质的标准库容器不是原子。将新元素添加到容器中不是原子操作,因此您可能必须使用MUTEX保护容器,这可能会消除内部存储原子的任何好处。
brian对deque
的建议是合理的,但仍然允许o(1)随机访问,尽管我希望它比vector
慢了几倍。Kerrek关于管理vector
的更高级别的建议也可以可行。
fwiw,另一个选项是将单个std::atomic_bool
s包裹起来,该类型将复制构造作为默认结构和分配的组合:
struct Copy_Constructible_Atomic_Bool : std::atomic_bool
{
Copy_Constructible_Atomic_Bool(const std::atomic_bool& rhs)
{
std::atomic_bool::operator=(rhs);
}
Copy_Constructible_Atomic_Bool(const Copy_Constructible_Atomic_Bool& rhs)
{
std::atomic_bool::operator=(rhs);
}
};
用法:
std::vector<Copy_Constructible_Atomic_Bool> vec;
std::atomic_bool temp;
temp = true;
vec.resize(100, temp);
原子不是被设计为移动的,因此您无法将它们重新分配到其他地方。但是,您可以替换它们。
vec = std::vector<std::atomic_bool>(100, true);
(我不是100%确定您可以在这里使用true
,但我相信您可以。)
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- C++匿名结构作为std::映射值
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 变量定义到C++布尔值转换
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 重载更少,则运算符返回相反的布尔值
- 将此布尔值传递给此函数的最有效方法是什么?
- 如何设置 c++ 类的布尔值?
- 互锁变量访问(在布尔值上)和 std::atomic_flag 之间的区别
- std::原子布尔值或普通全局布尔值在单线程中很好吗?
- 为什么我的变体将 std::string 转换为布尔值
- 想要断言 std::string,但编译器认为是布尔值
- 调整 std::vector<std::atomic_bool> 的大小,为所有原子布尔值分配 true
- 为什么 std::atomic<bool> 比挥发性布尔值慢得多?
- 为什么 std::string 没有隐式转换为布尔值
- 移动后是否应该 std::function::运算符布尔值返回 false
- "string_literal"解析为布尔值,但不解析为 std::string,当编译器选择函数的重载版本时
- 从 std::vector <bool>获取布尔值引用
- C++ - 无法从 std::基本字符串<char>转换为布尔值
- std::cin 如何同时返回布尔值和自身