【发布时间】:2017-08-06 04:28:59
【问题描述】:
如何在单个原子操作中进行以下操作?这可能吗?
LARGE_INTEGER* ptr; // field
void method()
{
LARGE_INTEGER* local = ptr;
ptr = nullptr;
}
所以我想将字段中的指针存储到本地指针中并立即将该字段设置为nullptr。
换句话说,我想在单个原子操作中将指针从字段移动到局部变量中。
【问题讨论】:
-
LARGE_INTEGER* local = InterlockedExchangePointer(&ptr, nullptr);可能需要对第一个参数进行强制转换。 -
@IgorTandetnik 可以无锁吗?
-
如图所示是无锁的。
-
@IgorTandetnik 它说
LARGE_INTEGER**与volatile PVOID *类型的参数不兼容 -
使用
std::atomic,或重新实现等效项。