以原子方式交换指针与 nullptr

Atomically exchange pointer with nullptr

本文关键字:指针 nullptr 交换 方式      更新时间:2023-10-16

如何在单个原子操作中执行以下操作?这可能吗?

LARGE_INTEGER* ptr; // field
void method()
{
LARGE_INTEGER* local = ptr;
ptr = nullptr;
}

所以我想将字段中的指针存储到本地指针中,并立即将该字段设置为nullptr.

换句话说,我想在单个原子操作中将指针从字段移动到局部变量中。

从 C++11 开始,您可以将std::atomic用于此目的,如下所示:

#include <atomic>
LARGE_INTEGER value;
std::atomic<LARGE_INTEGER*> ptr{&value};
LARGE_INTEGER* local = ptr.exchange(nullptr);