Прочитать на английском

Поделиться через


Thread.SpinWait(Int32) Метод

Определение

Вынуждает поток выполнять ожидание столько раз, сколько определено параметром iterations.

C#
public static void SpinWait(int iterations);

Параметры

iterations
Int32

32-разрядное знаковое целое число, определяющее, как долго потоку ожидать.

Комментарии

Метод SpinWait полезен для реализации блокировок. Классы в платформа .NET Framework, такие как Monitor и ReaderWriterLock, используют этот метод для внутренних целей. SpinWait по сути, помещает процессор в очень жесткий цикл с числом циклов, заданным параметром iterations . Таким образом, длительность ожидания зависит от скорости процессора.

Сравните это с методом Sleep . Поток, вызывающий Sleep , возвращает оставшуюся часть текущего среза процессорного времени, даже если указанный интервал равен нулю. Указание ненулевых интервалов для Sleep удаляет поток из рассмотрения планировщиком потоков до истечения интервала времени.

SpinWait обычно не используется для обычных приложений. В большинстве случаев следует использовать классы синхронизации, предоставляемые платформа .NET Framework, например вызов Monitor.Enter или оператор, который заключает Monitor.Enter в оболочку (lock в C# или SyncLock в Visual Basic).

Внимание!

В редких случаях, когда рекомендуется избежать переключения контекста, например когда известно, что изменение состояния неминуемо, вызовите метод в цикле SpinWait . Выполнение кода SpinWait предназначено для предотвращения проблем, которые могут возникнуть на компьютерах с несколькими процессорами. Например, на компьютерах с несколькими процессорами Intel, используюющими Hyper-Threading технологию, SpinWait предотвращает нехватку процессора в определенных ситуациях.

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1