1

我是新手,C++但我需要以多线程方式编写代码。在下面的代码中,如果Increase_value()被多个线程调用,那么确保Print_Value()打印最初增加的ID值的最有效方法是什么。Increase_value()换句话说,如何确保在运行期间,Print_Value()打印一个数字序列而不会丢失任何值(数字的顺序不是问题)。C++11可以在这里使用帮助中讨论的原子变量吗?

class foo 
{
   public:
      static int ID;
      void Increase_value() 
      {    
           ID++;  
           Print_Value (ID-1);
      }
      void Print_Value(int k)
      {
           cout << k ;
      }
};
4

1 回答 1

7

可以在这里使用 C++11 中讨论的原子变量吗?

确实。我想说使代码线程安全的最简单方法是ID制作std::atomic<int>

#include <atomic>

class foo 
{
  public:
      static std::atomic<int> ID ;
//           ^^^^^^^^^^^^^^^^
      void Increase_value() 
      {    
           int old = ID++;  
           Print_Value (old);
      }
      void Print_Value(int k)
      {  cout << k ;   }
}
于 2013-06-06T16:33:27.050 回答