鎖:InterlockedCompareExchage, CriticalSection, Mutex

幾種鎖的性能比較

從快到慢:InterlockedExchange, CriticalSection, SpinCriticalSection, 自己寫的SpinLock(Interlocked和死循環組成), Mutex

InterlockedExchange: CPU提供的一種機制,在更新內存的時候鎖住內存總線,防止其他CPU同時也修改同一塊內存。

interlocked指令會鎖住內存總線,還會設置 memory barrier,導致CPU同步緩存,造成性能大幅下降,因此這個操作不易頻繁使用。

 

lock-free的線程安全Queue:  可使用InterlockedCompareExchange+BusyWaiting循環的方式(自己寫的SpinLock),實現不陷入內核態; 

套路:讀取VAR的值a, 對a進行計算得到b,用Interlock比較VAR是否等於a, 等於則把b賦值給他,返回原值;返回值是a說明賦值成功了,返回值不是a說明別的線程修改了VAR(賦值失敗);賦值失敗則繼續循環嘗試以上操作(如果是SpinLock的話,在這裏先busy-waiting直到鎖變量釋放,減少interlock的調用次數)

Interlock的彙編實現  原理

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章