C++11 原子变量示例:多线程计数器
一个使用原子变量的例子是多线程计数器。假设有多个线程同时对一个计数器进行操作,我们希望保证计数器的操作是线程安全的。使用原子变量可以很方便地实现这个功能。
#include <iostream>
#include <atomic>
#include <thread>
std::atomic<int> counter(0); // 原子变量
void incrementCounter() {
for (int i = 0; i < 100000; ++i) {
counter.fetch_add(1); // 原子地增加计数器的值
}
}
int main() {
std::thread t1(incrementCounter);
std::thread t2(incrementCounter);
t1.join();
t2.join();
std::cout << "Final counter value: " << counter << std::endl;
return 0;
}
在上面的例子中,我们使用了std::atomic<int>来定义了一个原子变量counter。在incrementCounter函数中,每个线程都会多次增加counter的值,通过fetch_add函数可以原子地增加counter的值。
在主函数中,我们创建了两个线程t1和t2,它们分别调用incrementCounter函数来增加计数器的值。最后,我们输出计数器的最终值。
使用原子变量可以确保多个线程对计数器的操作是线程安全的,不会发生竞争条件。
原文地址: https://www.cveoy.top/t/topic/lLcx 著作权归作者所有。请勿转载和采集!