關於C++中的 _InterlockedIncrement 函式
阿新 • • 發佈:2020-12-27
//shared_ptr 原始碼中的物件引用次數 自增的實現,程式碼位於 memory檔案中,
//其中 _MT_INCR 的定義是:#define _MT_INCR(x) _INTRIN_RELAXED(_InterlockedIncrement)(reinterpret_cast<volatile long*>(&x))
void _Incref() noexcept { // increment use count _MT_INCR(_Uses); } void _Incwref() noexcept { // increment weak reference count_MT_INCR(_Weaks); }
微軟文件中的解釋https://docs.microsoft.com/en-us/previous-versions/ms919120(v=msdn.10):
This function both decrements (decreases by one) the value of the specified 32-bit variable and checks the resulting value.InterlockedDecrementprevents more than one thread from using theInterlockedDecrementor InterlockedIncrementfunction to access the same variable simultaneously.
原子鎖一般用來做為存保護時使用,特別是在多執行緒操作時。一次只允許一個執行緒對該變數進行操容作。
long a=0;
_interlockedincrement(&a);
a++;
_interlockeddecrement(&a);
就是對a加以保護,只允許當前執行緒對變數a進行操作,該執行緒執行完以後,其他執行緒才能對該變數進行操作,這個函式和interlockedincrement配合使用,一加一減
參考連結:https://zhidao.baidu.com/question/557872110144089692.html