Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Что конкретно делает метод Thread.SpinWait?

#c_sharp #net


Из документации откровенно говоря ничего непонятно, все очень сумбурно. Что именно
делает этот метод?
    


Ответы

Ответ 1



Русский машинный перевод не очень хорош, лучше смотреть в свежий английский оригинал: SpinWait essentially puts the processor into a very tight loop, with the loop count specified by the iterations parameter. The duration of the wait therefore depends on the speed of the processor. то есть SpinWait на самом деле просто выполняет холостой цикл, количество итераций которого равно параметру iterations. Продолжительность ожидания, таким образом, зависит от скорости процессора. Для чего такое может понадобиться? Например, для оптимизации блокировки: если заблокированный ресурс скорее всего будет через несколько тактов процессора освобождён, то имеет смысл перед уходом на ожидание в режим ядра (что является медленной операцией) прокрутить несколько холостых циклов в надежде, что ресурс за это время освободится. Именно это делает lock/Monitor.Enter.

Комментариев нет:

Отправить комментарий