C++11引入了原子变量(atomic variables)来支持多线程编程,它们提供了一种在多线程环境下进行线程安全操作的方式。下面是一些使用原子变量的示例:

  1. 原子整型变量(std::atomic_int)的使用:
#include <atomic>

std::atomic_int counter(0);

void increment_counter() {
    counter++;
}

int main() {
    increment_counter();
    int value = counter.load();  // 读取原子变量的值
    return 0;
}
  1. 原子布尔变量(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;
}
  1. 原子指针变量(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)的操作要更高效,因为它们使用硬件的原子操作指令来实现线程安全。

C++11 原子变量的使用

原文地址: https://www.cveoy.top/t/topic/i8sz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录