¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

SpinWait (Estructura)

.NET Framework 4.6 and 4.5

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

El tipo SpinWait expone los siguientes miembros.

  NombreDescripción
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCountObtiene el número de veces que se ha llamado a SpinOnce en esta instancia.
Propiedad públicaCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsNextSpinWillYieldObtiene si la llamada siguiente a SpinOnce da paso al procesador, lo que activa un cambio de contexto forzado.
Arriba

  NombreDescripción
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEqualsIndica si esta instancia y un objeto especificado son iguales. (Se hereda de ValueType).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetHashCodeDevuelve el código hash de esta instancia. (Se hereda de ValueType).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsResetRestablece el contador de ciclos.
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsSpinOnceRealiza un único ciclo.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsSpinUntil(Func<Boolean>)Itera en ciclos hasta que se satisface la condición especificada.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsSpinUntil(Func<Boolean>, Int32)Itera en ciclos hasta que se satisface la condición especificada o se agota el tiempo de espera indicado.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsSpinUntil(Func<Boolean>, TimeSpan)Itera en ciclos hasta que se satisface la condición especificada o se agota el tiempo de espera indicado.
Método públicoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsToStringDevuelve el nombre de tipo completo de esta instancia. (Se hereda de ValueType).
Arriba

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.

NotaNota

El atributo HostProtectionAttribute aplicado a este tipo o miembro tiene el valor de propiedad Resources siguiente: Synchronization | ExternalThreading. El atributo HostProtectionAttribute no afecta a las aplicaciones de escritorio (que normalmente se inician haciendo doble clic en un icono, escribiendo un comando o introduciendo una dirección URL en el explorador). Para obtener más información, vea la clase HostProtectionAttribute o Programación en SQL Server y atributos de protección de host.

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);
    }
}


.NET Framework

Compatible con: 4.5, 4

.NET Framework Client Profile

Compatible con: 4

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

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.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft