与 nullptr 原子地交换指针
Atomically exchange pointer with nullptr
如何在单个原子操作中进行以下操作?这可能吗?
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);
如何在单个原子操作中进行以下操作?这可能吗?
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);