Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Использовать такое на пользовательском уровне нужно с осторожностью, поскольку поток, вошедший в такой цикл, может быть прерван, и другой поток, пытающийся его дождаться, исчерпает свой квант, и тоже будет вытеснен. До какой-то частоты использования такие блокировки позволяют сэкономить на переключениях в ядро, но дальше они могут привести к резкому росту накладных расходов. Особенно в том случае, если код отлаживался на восьмиядерном процессоре, а затем запущен на двухъядерном, где вероятность прерывания потока примерно вчетверо выше.
Я знаю это. Спинлоки у меня там, где ожидаемое время WaitForSingleObject() на сигнальном объекте, например на свободном мьютексе, больше чем время ожидания. Второй случай, когда я такое использую — протокол реализован на MMF, где одно из полей — признак занятости. Там просто без вариантов: Sleep(1) ждёт дольше чем нужно.
Всё сказанное выше — личное мнение, если не указано обратное.