目录
简介
在 C++11 中,std::atomic
是一个用于原子操作的类模板。它提供了原子的读-改-写操作,以确保在多线程环境下对共享变量的操作是线程安全的。
std::atomic
的主要用途是对共享变量进行原子操作,例如递增、递减、赋值等。它可以用于实现线程安全的数据结构、计数器、信号量等。
下面是一个简单的示例,展示了如何使用std::atomic
:
#include <iostream>
#include <atomic>
#include <thread>
std::atomic<int> count(0);
void increment()
{
count++;
}
int main()
{
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "Count: " << count << std::endl;
return 0;
}
在上面的示例中,我们创建了一个std::atomic<int>
类型的变量count
,初始值为 0。然后,我们创建了两个线程t1
和t2
,它们都调用increment
函数对count
进行递增操作。
由于std::atomic
保证了原子性,所以在多线程环境下,count
的值将被正确地递增,而不会出现竞态条件或数据不一致的问题。
std::atomic
还提供了其他成员函数,例如operator++()
、operator--()
、operator=()
等,用于进行各种原子操作。
成员函数
std::atomic
类提供了一些成员函数,用于执行原子操作。这些函数在 C++11 中可用,用于多线程环境下对共享变量进行操作。
以下是std::atomic
类的一些常见成员函数:
-
operator++()
:递增原子变量。 -
operator--()
:递减原子变量。 -
operator=()
:赋值原子变量。 -
operator==()
:比较原子变量与另一个值是否相等。 -
operator!=()
:比较原子变量与另一个值是否不相等。 -
fetch_add()
:原子地将一个值添加到原子变量中。 -
fetch_sub()
:原子地从原子变量中减去一个值。 -
fetch_or()
:原子地将一个值或操作原子变量的值。 -
fetch_and()
:原子地将一个值与操作原子变量的值。 -
fetch_xor()
:原子地异或操作原子变量的值。 -
exchange()
:原子地交换原子变量的值。 -
compare_exchange_weak()
:原子地比较并交换原子变量的值(如果相等)。 -
compare_exchange_strong()
:原子地比较并交换原子变量的值(如果相等),具有更强的顺序保证。
这些成员函数提供了原子性的读-改-写操作,确保在多线程环境下对共享变量的操作是线程安全的。它们避免了竞态条件和数据不一致的问题。
标签:std,变量,原子,atomic,operator,操作 From: https://www.cnblogs.com/yubo-guan/p/17982255