带有原子属性的C ++ 11 Struct定义

时间:2013-05-22 22:27:54

标签: c++11 struct thread-safety atomic definition

在C ++ 11中,我有一个包含许多属性的结构:

#include <atomic>
struct Foo {
  int x;
  int y;
  // ...
  // LOTS of primitive type attributes, followed by...
  // ...
  std::atomic_bool bar;
}

我想定义一个像这样的实例:

bool bar_value = true;
Foo my_foo = {/*attribute values*/, bar_value};

然而,atomic_bool抛出了“使用已删除的函数”错误,因为我认为原子上不允许复制构造。有没有办法绕过这个,没有写出构造函数或单独分配每个值?

仅仅因为其中许多属性中的一个是特殊情况而不得不以特殊的方式处理这个相对平庸的结构似乎不方便。

更新

  • 任何接受者?我一直在寻找,但似乎没有任何直接的解决方法。

1 个答案:

答案 0 :(得分:2)

尝试将atomic_bool的初始化包装在自己的初始化列表中。它以g ++ 4.7为我工作。

#include <atomic>
#include <iostream>

struct Foo
{
    int x;
    int y;
    std::atomic_bool bar;
};

int main(int, char**)
{
    Foo f1 = {1, 2, {true}};
    Foo f2 = {3, 4, {false}};

    std::cout << "f1 - " << f1.x << " " << f1.y << " "
              << (f1.bar.load()?"true":"false") << std::endl;
    std::cout << "f2 - " << f2.x << " " << f2.y << " "
              << (f2.bar.load()?"true":"false") << std::endl;
}

我得到了以下输出:

$ g++ -std=c++11 test.cpp -o test && ./test
f1 - 1 2 true
f2 - 3 4 false