最近学习多线程下的整数自增,很好理解:
场景: 一个点击需求,用10个线程模拟10个用户同时点击,每个线程点击10 0000次, 那么实际上一共是点击100 0000 次。
下面分别使用无锁(结果肯定错误), mutex,_InterlockedIncrement, atomic 测试:
#include <iostream>
#include <string>
#include <atomic>
#include <thread>
#include <vector>
#include <mutex>
using namespace std;
long click1 = 0;
long click2= 0;
volatile long click3 = 0;
atomic_long click4=0;
void Fun111(int i)
{
for (int i = 0; i < 1000000; ++i)
{
++click1;
}
}
mutex mtx;
void Fun222(int i)
{
for (int i = 0; i < 1000000; ++i)
{
mtx.lock();
+&#