Freigeben über


Thread.EndThreadAffinity Methode

Definition

Benachrichtigt einen Host, dass verwalteter Code die Ausführung von Anweisungen beendet hat, die von der Identität des aktuellen physischen Betriebssystemthreads abhängen.

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

Ausnahmen

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Beispiele

Im folgenden Beispiel wird die Verwendung der Methoden und veranschaulicht, um einen Host darüber zu benachrichtigen, dass ein Codeblock von der Identität eines physischen BeginThreadAffinity EndThreadAffinity Betriebssystemthreads abhängt.

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

Hinweise

Einige Hosts der Common Language Runtime, z. B. Microsoft SQL Server 2005, bieten ihre eigene Threadverwaltung. Ein Host, der eine eigene Threadverwaltung bietet, kann eine ausgeführte Aufgabe jederzeit von einem physischen Betriebssystemthread in einen anderen verschieben. Die meisten Aufgaben sind von diesem Wechsel nicht betroffen. Einige Tasks verfügen jedoch über Threadaffinität, d. h. sie hängen von der Identität eines physischen Betriebssystemthreads ab. Diese Aufgaben müssen den Host informieren, wenn sie Code ausführen, der nicht umgeschaltet werden soll.

Wenn Ihre Anwendung beispielsweise eine System-API aufruft, um eine Betriebssystemsperre mit Threadaffinität wie win32 CRITICAL_SECTION zu erhalten, müssen Sie vor dem Abrufen der Sperre und nach dem Freigeben der Sperre BeginThreadAffinity EndThreadAffinity aufrufen.

Die Verwendung dieser Methode in Code, der unter SQL Server 2005 ausgeführt wird, erfordert, dass der Code auf der höchsten Hostschutzebene ausgeführt wird.

Gilt für

Siehe auch