Partager via


Thread.BeginThreadAffinity Méthode

Définition

Avertit un hôte que le code managé est sur le point d'exécuter des instructions qui dépendent de l'identité du thread du système d'exploitation physique actuel.

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 ()
Attributs

Exceptions

L'appelant n'a pas l'autorisation requise.

Exemples

L’exemple suivant illustre l’utilisation des BeginThreadAffinity méthodes et EndThreadAffinity pour avertir un hôte qu’un bloc de code dépend de l’identité d’un thread de système d’exploitation physique.

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

Remarques

certains hôtes du common language runtime, comme Microsoft SQL Server 2005, fournissent leur propre gestion des threads. Un hôte qui fournit sa propre gestion de threads peut déplacer une tâche en cours d’exécution d’un thread de système d’exploitation physique vers un autre à tout moment. La plupart des tâches ne sont pas affectées par ce changement. Toutefois, certaines tâches ont une affinité de thread, autrement dit, elles dépendent de l’identité d’un thread de système d’exploitation physique. Ces tâches doivent informer l’hôte lorsqu’il exécute du code qui ne doit pas être basculé.

Par exemple, si votre application appelle une API système pour acquérir un verrou de système d’exploitation qui a une affinité de thread, telle qu’un CRITICAL_SECTION Win32, vous devez appeler BeginThreadAffinity avant d’acquérir le verrou, puis EndThreadAffinity après avoir libéré le verrou.

l’utilisation de cette méthode dans le code qui s’exécute sous SQL Server 2005 requiert l’exécution du code au niveau de protection de l’hôte le plus élevé.

S’applique à

Voir aussi