Condividi tramite


Thread.BeginThreadAffinity Metodo

Definizione

Notifica a un host che il codice gestito sta per eseguire istruzioni che dipendono dall'identità del thread fisico corrente del sistema operativo.

public:
 static void BeginThreadAffinity();
public static void BeginThreadAffinity ();
[System.Security.SecurityCritical]
public static void BeginThreadAffinity ();
static member BeginThreadAffinity : unit -> unit
[<System.Security.SecurityCritical>]
static member BeginThreadAffinity : unit -> unit
Public Shared Sub BeginThreadAffinity ()
Attributi

Eccezioni

Il chiamante non dispone dell'autorizzazione richiesta.

Esempio

Nell'esempio seguente viene illustrato l'uso dei metodi e per notificare a un host che un blocco di codice dipende dall'identità BeginThreadAffinity di un thread del sistema operativo EndThreadAffinity fisico.

using namespace System::Threading;
using namespace System::Security::Permissions;

public ref class MyUtility
{
public:
   [SecurityPermissionAttribute(SecurityAction::Demand, ControlThread=true)]
   void PerformTask()
   {
      // Code that does not have thread affinity goes here.
      //
      Thread::BeginThreadAffinity();
      //
      // Code that has thread affinity goes here.
      //
      Thread::EndThreadAffinity();
      //
      // More code that does not have thread affinity.
   }
};
using System.Threading;
using System.Security.Permissions;

[SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlThread)]
public class MyUtility
{
    [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.ControlThread)]
    public void PerformTask()
    {
        // Code that does not have thread affinity goes here.
        //
        Thread.BeginThreadAffinity();
        //
        // Code that has thread affinity goes here.
        //
        Thread.EndThreadAffinity();
        //
        // More code that does not have thread affinity.
    }
}
Imports System.Threading
Imports System.Security.Permissions

<SecurityPermission(SecurityAction.Demand, Flags:=SecurityPermissionFlag.ControlThread)> _
Friend Class MyUtility
    <SecurityPermission(SecurityAction.Demand, Flags:=SecurityPermissionFlag.ControlThread)> _
    Public Sub PerformTask() 
        ' Code that does not have thread affinity goes here.
        '
        Thread.BeginThreadAffinity()
        '
        ' Code that has thread affinity goes here.
        '
        Thread.EndThreadAffinity()
        '
        ' More code that does not have thread affinity.
    End Sub
End Class

Commenti

Alcuni host di Common Language Runtime, ad esempio Microsoft SQL Server 2005, forniscono la gestione dei thread. Un host che fornisce la propria gestione dei thread può spostare un'attività in esecuzione da un thread del sistema operativo fisico a un altro in qualsiasi momento. La maggior parte delle attività non è interessata da questa commutazione. Tuttavia, alcune attività hanno affinità di thread, che dipendono dall'identità di un thread del sistema operativo fisico. Queste attività devono informare l'host quando eseguono codice che non deve essere commutato.

Ad esempio, se l'applicazione chiama un'API di sistema per acquisire un blocco del sistema operativo con affinità di thread, ad esempio un CRITICAL_SECTION Win32, è necessario chiamare prima di acquisire il blocco e dopo il rilascio BeginThreadAffinity EndThreadAffinity del blocco.

L'uso di questo metodo nel codice eseguito SQL Server 2005 richiede che il codice venga eseguito al livello di protezione host più alto.

Si applica a

Vedi anche