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

Mik*_*ike 1 c++ multithreading atomic c++11

我是新手,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 ;
      }
};
Run Code Online (Sandbox Code Playgroud)

And*_*owl 7

可以使用C++ 11中讨论的原子变量来帮助吗?

当然.我会说让你的代码是线程安全的是让最简单的方法IDstd::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 ;   }
}
Run Code Online (Sandbox Code Playgroud)