1.原子操作:原子操作可以理解为不需要用到互斥量加锁技术的多线程并发编程方式。
2.特点
(1):当程序中代码频繁用到互斥量(锁),此时原子操作的效率比互斥量(锁)高。
(2):原子操作一般针对的是一个变量,而不是一个代码段,
3.代码对比,以下代码1比代码2效率高很多
代码1
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> #include<thread> #include<string> #include<vector> #include<algorithm> #include<windows.h> #include<list> #include<mutex> #include<future> #include<chrono> #include<atomic> std::atomic_int myCount = 0; int ThreadFun() { for (int i = 0; i < 10000000; i++) { myCount++; } return 5; } int main() { std::thread t1(ThreadFun); std::thread t2(ThreadFun); t1.join(); t2.join(); std::cout << "myCout结果:" << myCount <<std::endl; return 0; }
代码2
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream> #include<thread> #include<string> #include<vector> #include<algorithm> #include<windows.h> #include<list> #include<mutex> #include<future> #include<chrono> #include<atomic> int myCount = 0; std::mutex mut; int ThreadFun() { for (int i = 0; i < 10000000; i++) { mut.lock(); myCount++; mut.unlock(); } return 5; } int main() { std::thread t1(ThreadFun); std::thread t2(ThreadFun); t1.join(); t2.join(); std::cout << "myCout结果:" << myCount <<std::endl; return 0; }
4.注意:原子操作不支持这种写法,myCount = myCount + 1,而支持myCount++;