如何使这段代码线程安全? ID ++; Print_Value(ID);

时间:2013-06-06 16:30:53

标签: c++ multithreading c++11 atomic

我是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 ;
      }
};

1 个答案:

答案 0 :(得分: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 ;   }
}