使用atomic实现无锁方式的全局变量访问
#include <atomic>
#include <thread>
#include <iostream>
using namespace std;atomic_uint32_t g_atomic_total = 0;
uint32_t g_total_non_atomic = 0;//线程函数,用于累加
void threadFunc(int64_t endNum) {for (int64_t i = 1; i <= endNum; ++i) {g_atomic_total += 1;g_total_non_atomic += 1;}
}int main() {int64_t endNum = 10000;thread t1(threadFunc, endNum);thread t2(threadFunc, endNum);t1.join();t2.join();cout << "total=" << g_atomic_total << endl; //10100cout << "g_total_non_atomic=" << g_total_non_atomic << endl; //10100
}
编译运行:
g++ atomic_int.cpp --std=gnu++1z -lpthread