Il thread rimane in attesa per il numero di volte definite dal parametro iterations.
Assembly: mscorlib (in mscorlib.dll)
<HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization := True, _ ExternalThreading := True)> _ Public Shared Sub SpinWait ( _ iterations As Integer _ )
[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, ExternalThreading = true)] public static void SpinWait( int iterations )
[HostProtectionAttribute(SecurityAction::LinkDemand, Synchronization = true, ExternalThreading = true)] public: static void SpinWait( int iterations )
[<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.
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).
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
|
|---|
|
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. |
.NET Framework
Supportato in: 4, 3.5, 3.0, 2.0, 1.1, 1.0.NET Framework Client Profile
Supportato in: 4, 3.5 SP1Windows 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.
Attenzione
Nota