Windows Via C/C++のコードを使用して、Windows 7 でスリム リーダー/ライター ロックのパフォーマンスをテストしました。
その結果、排他ロックアウトのパフォーマンスが共有のものであることに驚きました。これがコードと結果です。
unsigned int __stdcall slim_reader_writer_exclusive(void *arg)
{
//SRWLOCK srwLock;
//InitializeSRWLock(&srwLock);
for (int i = 0; i < 1000000; ++i) {
AcquireSRWLockExclusive(&srwLock);
g_value = 0;
ReleaseSRWLockExclusive(&srwLock);
}
_endthreadex(0);
return 0;
}
unsigned int __stdcall slim_reader_writer_shared(void *arg)
{
int b;
for (int i = 0; i < 1000000; ++i) {
AcquireSRWLockShared(&srwLock);
//b = g_value;
g_value = 0;
ReleaseSRWLockShared(&srwLock);
}
_endthreadex(0);
return 0;
}
g_value
グローバルな int volatile 変数です。
なぜこのようなことが起こるのか、親切に説明していただけますか?