SpinWait Estructura
TOC
Collapse the table of content
Expand the table of content
Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

SpinWait (Estructura)

.NET Framework (current version)
 

Proporciona compatibilidad con la espera basada en ciclos.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public struct SpinWait

NombreDescripción
System_CAPS_pubpropertyCount

Obtiene el número de veces que se ha llamado a SpinOnce en esta instancia.

System_CAPS_pubpropertyNextSpinWillYield

Obtiene si la llamada siguiente a SpinOnce da paso al procesador, lo que activa un cambio de contexto forzado.

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Indica si esta instancia y un objeto especificado son iguales.(Heredado de ValueType.)

System_CAPS_pubmethodGetHashCode()

Devuelve el código hash de esta instancia.(Heredado de ValueType.)

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual. (Heredado de Object.)

System_CAPS_pubmethodReset()

Restablece el contador de ciclos.

System_CAPS_pubmethodSpinOnce()

Realiza un único ciclo.

System_CAPS_pubmethodSystem_CAPS_staticSpinUntil(Func<Boolean>)

Itera en ciclos hasta que se satisface la condición especificada.

System_CAPS_pubmethodSystem_CAPS_staticSpinUntil(Func<Boolean>, Int32)

Itera en ciclos hasta que se satisface la condición especificada o se agota el tiempo de espera indicado.

System_CAPS_pubmethodSystem_CAPS_staticSpinUntil(Func<Boolean>, TimeSpan)

Itera en ciclos hasta que se satisface la condición especificada o se agota el tiempo de espera indicado.

System_CAPS_pubmethodToString()

Devuelve el nombre de tipo completo de esta instancia.(Heredado de ValueType.)

SpinWait encapsula la lógica de giro común.En equipos de un solo procesador, cede siempre se utilizan en lugar de esperas ocupados, y en equipos con los procesadores Intel que emplean tecnología de Hyper-Threading, ayuda a evitar el colapso de los subprocesos de hardware.SpinWait encapsula una buena mezcla de giro y verdadero rendimiento.

SpinWait es un tipo de valor, lo cual significa que el código de bajo nivel puede utilizar SpinWait sin miedo de provocar sobrecargas de asignación innecesarias.SpinWait no suele ser útil para las aplicaciones comunes.En la mayoría de los casos, debería utilizar las clases de sincronización proporcionadas por .NET Framework, por ejemplo Monitor.Para la mayoría de los propósitos donde se requiere un ciclo de espera, sin embargo, el tipo SpinWait es preferible al método SpinWait.

En el ejemplo anterior se muestra cómo utilizar SpinWait.

using System;
using System.Threading;
using System.Threading.Tasks;

class SpinWaitDemo
{
    // Demonstrates:
    //      SpinWait construction
    //      SpinWait.SpinOnce()
    //      SpinWait.NextSpinWillYield
    //      SpinWait.Count
    static void Main()
    {
        bool someBoolean = false;
        int numYields = 0;

        // First task: SpinWait until someBoolean is set to true
        Task t1 = Task.Factory.StartNew(() =>
        {
            SpinWait sw = new SpinWait();
            while (!someBoolean)
            {
                // The NextSpinWillYield property returns true if
                // calling sw.SpinOnce() will result in yielding the
                // processor instead of simply spinning.
                if (sw.NextSpinWillYield) numYields++;
                sw.SpinOnce();
            }

            // As of .NET Framework 4: After some initial spinning, SpinWait.SpinOnce() will yield every time.
            Console.WriteLine("SpinWait called {0} times, yielded {1} times", sw.Count, numYields);
        });

        // Second task: Wait 100ms, then set someBoolean to true
        Task t2 = Task.Factory.StartNew(() =>
        {
            Thread.Sleep(100);
            someBoolean = true;
        });

        // Wait for tasks to complete
        Task.WaitAll(t1, t2);
    }
}

Universal Windows Platform
Disponible desde 4.5
.NET Framework
Disponible desde 4.0
Portable Class Library
Compatible con: portable .NET platforms
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1

Aunque SpinWait está diseñado para ser utilizado en aplicaciones simultáneas, no está diseñado para ser utilizado concurrentemente desde varios subprocesos.Los miembros SpinWait no son seguros para subprocesos.Si varios subprocesos deben girar, cada uno debería utilizar su propia instancia de SpinWait.

Volver al principio
Mostrar:
© 2016 Microsoft