2017-08-06 46 views
0

如何在单个原子操作中执行以下操作?那可能吗?与nullptr原子交换指针

LARGE_INTEGER* ptr; // field 

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

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

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

+2

'LARGE_INTEGER *本地= InterlockedExchangePointer(PTR,nullptr);'可能需要在第一个参数演员。 –

+0

@IgorTandetnik可以锁定自由吗? –

+0

如图所示,它是无锁的。 –

回答

1

由于C++ 11可以使用std::atomic用于此目的是这样的:

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