std::atomic 使用教程
时间: 2023-12-27 12:04:05 浏览: 138
C++多线程学习资料,新手入门学习必备资料
std::atomic是C++11引入的一个模板类,用于实现原子操作。它提供了一些常见且容易理解的方法,如store、load、exchange、compare_exchange_weak和compare_exchange_strong。
下面是一个使用std::atomic的示例代码,演示了如何使用std::atomic实现一个无锁的压栈操作:
```cpp
template<typename T>
class lock_free_stack {
private:
struct node {
T data;
node* next;
node(T const& data_): data(data_) {}
};
std::atomic<node*> head;
public:
void push(T const& data) {
node* const new_node = new node(data);
new_node->next = head.load();
while(!head.compare_exchange_weak(new_node->next, new_node));
}
};
```
在上面的代码中,我们使用std::atomic<node*>来声明一个原子指针类型的head变量。在push操作中,我们创建一个新的节点new_node,并将head的当前值赋给new_node的next指针。然后,我们使用compare_exchange_weak方法来尝试将new_node->next赋给head,如果失败,则重试直到成功。
这样,我们就实现了一个无锁的压栈操作,通过使用std::atomic来保证操作的原子性。
阅读全文