원자의 정수를 나타내는 래퍼가 있습니다. 내부적으로, 그것은 volatile long
변수하려면 Windows 'InterlockedIncrement()
및 InterlockedDecrement()
기능을 사용하여 구현됩니다휘발성 멤버에 대한 액세스 방법
class AtomicInt {
public:
...
operator long() const { return m_value; }
private:
volatile long m_value;
};
내 질문입니다, 정확한 현재 값을 쿼리에 대해 위의 연산자 (즉, 당신은 항상 현재의 값을 얻을) 또는 캐시 된 값에 문제가 발생하지 않도록하려면 메서드를 volatile
으로 선언해야합니까?
여기서 휘발성은 마이크로 소프트의 추가 의미를 전달한다고 가정합니다. –
예, MSVC의 '휘발성'해석은 실제의 의미와 '휘발성'의 목적에 대한 혼란을 더합니다 ... BTW, 메모리 장벽을 추가하는 동안 Itanium은 '휘발성 (volatile)'으로 WOA (Windows on ARM)에서도 똑같이 할 것인가? – Jason
음, 확실하지는 않지만 일부 플랫폼에서는 '휘발성'이 약 해지면 놀랄 것입니다. –