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)
可以使用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 ; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |