执行100w次的结果(单位:微妙)
------------------------------------------------------------------------------------
线程 volatile读 volatile写 InterlockedInc CS SRWLock共享 SRWLock独占 互斥量
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);
如果希望应用程序获得最佳性能,那么首先应该尝试不要共享数据,然后依次使用
volatile读取,volatile写入,Interlocked API, SRWLock以及关键段,当前仅当
所有这些都不满足要求的时候再使用内核对象。
来自Jeffrey Riched《windows核心编程(5)》的数据,录在这里备查。