std :: atomic_bool未正确初始化/读取

时间:2014-06-03 17:42:49

标签: c++11 visual-studio-2013 atomic

我在根据布尔标志的值启动和停止后台线程时遇到了问题。我曾寻求帮助here并得到了非常详细的答案here

然而,在使用该解决方案几天后,在我看来它有问题。我在SomeObject::DoRun中调用的SomeObject::Start中启动了一个工作线程,它应该在循环中完成一些工作并在我调用SomeObject::Stop时退出:

struct SomeObject {
  SomeObject() { SetDone(true); }
  std::atomic_bool done_;
  void DoRun();
  void SetDone(bool v) { done_store(v); }
  bool IsDone() { return done_.load(); }
  void Start() {
       if (IsDone()) {
           SetDone(false);
           DoRun();
       }
  void Stop() { SetDone(true); }
};

但是,有时IsDone() Start()中的false检查会返回DoRun()done永远不会被调用,即使我已将true设置为{ {1}}在构造函数中。

我在构造函数中将done_设置为true然后在false中将其设置为Start()的原因是我要调用Start() / {{ 1}}重复对同一个对象。

我在这里做错了什么?

0 个答案:

没有答案