C++11 原子变量的使用
C++11引入了原子变量(atomic variables)来支持多线程编程,它们提供了一种在多线程环境下进行线程安全操作的方式。下面是一些使用原子变量的示例:
- 原子整型变量(std::atomic_int)的使用:
#include <atomic>
std::atomic_int counter(0);
void increment_counter() {
counter++;
}
int main() {
increment_counter();
int value = counter.load(); // 读取原子变量的值
return 0;
}
- 原子布尔变量(std::atomic_bool)的使用:
#include <atomic>
std::atomic_bool flag(false);
void set_flag() {
flag = true;
}
int main() {
set_flag();
bool value = flag.load(); // 读取原子变量的值
return 0;
}
- 原子指针变量(std::atomic<T*>)的使用:
#include <atomic>
struct Node {
int value;
Node* next;
};
std::atomic<Node*> head(nullptr);
void add_node(int value) {
Node* new_node = new Node;
new_node->value = value;
new_node->next = head.load();
while (!head.compare_exchange_weak(new_node->next, new_node)) {
// CAS操作,尝试将new_node->next设置为new_node,如果失败则重新读取new_node->next的值
}
}
int main() {
add_node(1);
Node* node = head.load();
return 0;
}
需要注意的是,原子变量的操作是原子的,不会被其他线程中断。另外,原子变量的操作通常比锁(mutex)的操作要更高效,因为它们使用硬件的原子操作指令来实现线程安全。
原文地址: https://www.cveoy.top/t/topic/i8sz 著作权归作者所有。请勿转载和采集!