Thread.EndThreadAffinity Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Avertit un hôte que le code managé a terminé l'exécution des instructions qui dépendent de l'identité du thread du système d'exploitation physique actuel.
public:
static void EndThreadAffinity();
public static void EndThreadAffinity ();
[System.Security.SecurityCritical]
public static void EndThreadAffinity ();
static member EndThreadAffinity : unit -> unit
[<System.Security.SecurityCritical>]
static member EndThreadAffinity : unit -> unit
Public Shared Sub EndThreadAffinity ()
- 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é.