2017-08-06 45 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);