Thread.SpinWait(Int32) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Вызывает ожидание потока количества раз, определенного параметром iterations .
public:
static void SpinWait(int iterations);
public static void SpinWait(int iterations);
static member SpinWait : int -> unit
Public Shared Sub SpinWait (iterations As Integer)
Параметры
- 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).
Caution
В редких случаях, когда полезно избежать переключения контекста, например когда вы знаете, что изменение состояния неизбежно, вызов SpinWait метода в цикле. Выполнение кода SpinWait предназначено для предотвращения проблем, которые могут возникнуть на компьютерах с несколькими процессорами. Например, на компьютерах с несколькими процессорами Intel, используюющими технологию Hyper-Threading, SpinWait предотвращает нехватку процессора в определенных ситуациях.