重庆网站建设重庆网站制作重庆seo霸屏
C++11提供了一个原子类型std::atomic<T>,可以使用任意类型作为模板参数,C++11内置了整型的原子变量,可以更方便的使用原子变量,使用原子变量就不需要使用互斥量来保护该变量了,用起来更简洁。例如,要做一个计数器,使用mutex是这样的,如下代码:
#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
using namespace std;int value = 0;std::mutex g_mutex;void increment()
{for(int i = 0; i < 10; i++){std::lock_guard<std::mutex> lock(g_mutex);++value;cout << "increment value: " << value << endl;}
}void decrement()
{for(int i = 0; i < 10; i++){std::lock_guard<std::mutex> lock(g_mutex);--value;cout << "decrement value: " << value << endl;}
}int main()
{thread t1(increment);thread t2(decrement);t1.join();t2.join();return 0;
}
如果使用了原子变量,就不需要再定义互斥量了,使用更方便了,如下代码清单:
#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
#include <atomic>
using namespace std;
std::atomic<int> value;
void increment()
{
for(int i = 0; i < 10; i++)
{
++value;
cout << "increment value: " << value.load() << endl;
}
}
void decrement()
{
for(int i = 0; i < 10; i++)
{
--value;
cout << "decrement value: " << value.load() << endl;
}
}
int main()
{
thread t1(increment);
thread t2(decrement);
t1.join();
t2.join();
return 0;
}