Добрый день
Переношу параллельные вычисления с OSX на Вындоуз. Нужна ф-ция "спиннера" (прокрутки). Я сделал так
void LockSpin( volatile int * theSpin )
{
int spinCount = 0;
while (InterlockedExchange(theSpin, 1) != 0)
spinCount = (spinCount + 1) ^ 0xAAA;
}
void UnlockSpin( volatile int * theSpin )
{
*theSpin = 0;
}
Понятно я могу использовать Qt ф-цию (вместо InterlockedExchange), эффект тот же. Вот как бы мне "прокручиваться" поумнее? Смущает напр Википедия
На современных процессорах цикл ожидания может выполнятся очень быстро за счет особенностей конвейерной архитектуры, что помимо наматывания холостых циклов может приводить к более интенсивному нагреву чем при обычной работе. В Pentium 4 и последующих моделях процессоров Intel введена специальная ассемблерная команда для вставки внутрь цикла pause (опкод 0xf3 0x90) предназначение которой проинструктировать процессор, что данный цикл является циклом ожидания.
Было бы хорошо вместо while задействовать штатную ф-цию (как OSSpinLockLock в OSX). Имеется ли такая?
Спасибо