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