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

Estructura SpinWait

.NET Framework (current version)
 

Publicado: octubre de 2016

Proporciona compatibilidad para 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 SpinOnce se ha llamado en esta instancia.

System_CAPS_pubpropertyNextSpinWillYield

Obtiene si la siguiente llamada a SpinOnce dará como resultado del 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 número.

System_CAPS_pubmethodSpinOnce()

Realiza un único ciclo.

System_CAPS_pubmethodSystem_CAPS_staticSpinUntil(Func<Boolean>)

Gira hasta que se satisfaga la condición especificada.

System_CAPS_pubmethodSystem_CAPS_staticSpinUntil(Func<Boolean>, Int32)

Gira hasta que se satisfaga la condición especificada o hasta que expire el tiempo de espera especificado.

System_CAPS_pubmethodSystem_CAPS_staticSpinUntil(Func<Boolean>, TimeSpan)

Gira hasta que se satisfaga la condición especificada o hasta que expire el tiempo de espera especificado.

System_CAPS_pubmethodToString()

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

SpinWait Encapsula la lógica común de giro. En equipos con procesador único, produce siempre se utiliza en lugar de esperas ocupadas y en equipos con procesadores de Intel emplean la tecnología Hyper-Threading, ayuda a evitar la falta de subprocesos de hardware. SpinWait encapsula una buena combinación de giro y rinde true.

SpinWait es un tipo de valor, lo que significa que el código de bajo nivel puede utilizar SpinWait sin miedo a sobrecargas de asignación innecesarias. SpinWait no suele ser útil para las aplicaciones comunes. En la mayoría de los casos, debe utilizar las clases de sincronización proporcionadas por .NET Framework, como Monitor. Para fines de mayoría en ciclo de espera es necesario, sin embargo, la SpinWait tipo debe ser preferible la SpinWait método.

En el ejemplo siguiente se muestra cómo utilizar un 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);
    }
}

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 4.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1

Mientras SpinWait está diseñado para utilizarse en aplicaciones simultáneas, no está diseñado para utilizarse desde varios subprocesos simultáneamente. SpinWait los miembros no son seguros para subprocesos. Si varios subprocesos deben girar, cada uno debería utilizar su propia instancia de SpinWait.

Volver al principio
Mostrar: