Windows API提供了InterlockedExchange
,它以原子方式在內存中設置一個值。只使用GCC內在函數,我想創建一個等價的函數。設置該值然後調用內存屏障就足夠了(請參閱下面的代碼)?移植InterlockedExchange,僅使用GCC內部函數
template <typename T>
T InterlockedExchange(volatile T& _data, T _value)
{
const T oldValue = _data;
_data = _value;
__sync_synchronize();
return oldValue;
}
謝謝。
編輯:建議片段是不是一個正確的解決問題的方法,因爲它顯然不是原子的(不過,好了,我不得不至少給一試)。
你聲明'_data'參數作爲參考,但稍後使用指針解引用來訪問它。 –
已更改,謝謝:) – qdii