Обратите внимание на одно ядро, вы можете изменить это, сняв блокировку, но это необходимо для многоядерности.
шал, что в Интернете есть книга Intel, в которой описываются циклы процессора, необходимые для конкретной инструкции по сборке, но я не могу это выяснить (после тяжелых попыток). Может кто-нибудь показать мне, как найти цикл процессора, пожалуйста?
Вот пример, в приведенном ниже коде mov / lock равен 1 циклу ЦП, а xchg - 3 цикла ЦП.
// This part is Platform dependent!
#ifdef WIN32
inline int CPP_SpinLock::TestAndSet(int* pTargetAddress,
int nValue)
{
__asm
{
mov edx, dword ptr [pTargetAddress]
mov eax, nValue
lock xchg eax, dword ptr [edx]
}
// mov = 1 CPU cycle
// lock = 1 CPU cycle
// xchg = 3 CPU cycles
}
#endif // WIN32
Кстати: вот URL для кода, который я разместил:http://www.codeproject.com/KB/threads/spinlocks.aspx