Metodo Thread.SpinWait (System.Threading)

Cambia visualizzazione:
ScriptFree
Riferimento a .NET Framework
Metodo Thread.SpinWait
Il presente articolo è stato tradotto manualmente. Per visualizzare questa pagina e contemporaneamente visualizzarne il contenuto in lingua inglese, passare alla visualizzazione semplificata.

Il thread rimane in attesa per il numero di volte definite dal parametro iterations.

Spazio dei nomi:  System.Threading
Assembly:  mscorlib (in mscorlib.dll)
Sintassi

Visual Basic
<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True,  _
	ExternalThreading := True)> _
Public Shared Sub SpinWait ( _
	iterations As Integer _
)
C#
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public static void SpinWait(
	int iterations
)
Visual C++
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public:
static void SpinWait(
	int iterations
)
F#
[<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
    ExternalThreading = true)>]
static member SpinWait : 
        iterations:int -> unit 

Parametri

iterations
Tipo: System.Int32
Intero con segno a 32 bit che definisce la durata dell'attesa del thread.
Note

Il metodo SpinWait è utile per l'implementazione di blocchi. Le classi in .NET Framework, ad esempio Monitor e ReaderWriterLock, utilizzano internamente questo metodo. SpinWait inserisce essenzialmente il processore in un ciclo molto ridotto, in cui il conteggio dei cicli è specificato dal parametro iterations. La durata dell'attesa dipende pertanto dalla velocità del processore.

Il comportamento di tale metodo è diverso da quello del metodo Sleep. Un thread che chiama il metodo Sleep restituisce il resto del periodo corrente del tempo del processore, anche se l'intervallo specificato è zero. Se si specifica un intervallo diverso da zero per il metodo Sleep, il thread non verrà preso in considerazione dal servizio di pianificazione dei thread fino al termine dell'intervallo di tempo.

Il metodo SpinWait non è in genere utile per le applicazioni comuni. Nella maggior parte dei casi è necessario utilizzare le classi di sincronizzazione fornite da .NET Framework e, ad esempio, chiamare il metodo Monitor.Enter o un'istruzione che esegue il wrapping del metodo Monitor.Enter (lock in C# o SyncLock in Visual Basic).

Nota di avviso Attenzione

Nella rara circostanza in cui è preferibile evitare uno scambio di contesto, ad esempio quando una modifica dello stato è imminente, effettuare una chiamata al metodo SpinWait nel ciclo. Il codice eseguito dal metodo SpinWait è progettato in modo da impedire che possano verificarsi problemi in computer con più processori. Ad esempio, in computer con più processori Intel™ basati su tecnologia Hyper-Threading™, il metodo SpinWait impedisce l'esaurimento delle risorse del processore in determinate situazioni.

Nota Nota

L'attributo HostProtectionAttribute applicato a questo tipo di membro dispone del seguente valore per la proprietà Resources: Synchronization | ExternalThreading. L'oggetto HostProtectionAttribute non influisce sulle applicazioni desktop, che in genere vengono avviate facendo doppio clic sull'icona, digitando un comando oppure immettendo un URL in un browser. Per ulteriori informazioni, vedere la classe HostProtectionAttribute o programmazione per SQL Server e attributi di protezione host.

Informazioni sulla versione

.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1
Piattaforme

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Vedere anche

Riferimenti