Форум вопросов и ответов

Форум вопросов и ответов (https://www.otvetnemail.ru/)
-   Продолжение старого архива (https://www.otvetnemail.ru/prodolzhenie-starogo-arhiva-804/)
-   -   Штатная ф-ция Spin Lock (Windows) ? (https://www.otvetnemail.ru/prodolzhenie-starogo-arhiva-804/shtatnaya-f-ciya-spin-lock-windows-338730/)

Guest 30.09.2011 12:59

Штатная ф-ция Spin Lock (Windows) ?
 
Добрый день Переношу параллельные вычисления с 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). Имеется ли такая?Спасибо


Часовой пояс GMT, время: 14:15.


© www.otvetnemail.ru - Форум вопросов и ответов.