執(zhí)行100w次的結(jié)果(單位:微妙)
------------------------------------------------------------------------------------
線程 volatile讀 volatile寫 InterlockedInc CS SRWLock共享 SRWLock獨(dú)占 互斥量
1 8 8 35 66 66 67 1060
2 8 76 153 268 134 148 11082
4 9 145 361 768 244 307 23785
volatile讀 long lvalue = gv_value;
volatile寫 gv_value = 0;
InterlockedIncrement(&gv_value);
EnterCriticalSection(&cs);
gv_value = 0;
LeaveCriticalSection(&cs);
AcquireSRWLockShared/Exclusive(&g_srwlock);
gv_value = 0;
ReleaseSRWLockShared/Exclusive(&g_srwlock);
WaitForSingleObject(&g_hMutex, INFINITE);
gv_value = 0;
RleaseMutex(g_hMutex);
如果希望應(yīng)用程序獲得最佳性能,那么首先應(yīng)該嘗試不要共享數(shù)據(jù),然后依次使用
volatile讀取,volatile寫入,Interlocked API, SRWLock以及關(guān)鍵段,當(dāng)前僅當(dāng)
所有這些都不滿足要求的時候再使用內(nèi)核對象。
來自Jeffrey Riched《windows核心編程(5)》的數(shù)據(jù),錄在這里備查。