Thread.BeginThreadAffinity Methode

Definition

Benachrichtigt einen Host, dass verwalteter Code im Begriff ist, Anweisungen auszuführen, die von der Identität des aktuellen physischen Betriebssystemthreads abhängen.Notifies a host that managed code is about to execute instructions that depend on the identity of the current physical operating system thread.

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

Ausnahmen

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.The caller does not have the required permission.

Beispiele

Im folgenden Beispiel wird veranschaulicht, wie die Methoden BeginThreadAffinity und EndThreadAffinity verwendet werden, um einen Host zu benachrichtigen, dass ein Codeblock von der Identität eines physischen Betriebssystemthreads abhängig ist.The following example demonstrates the use of the BeginThreadAffinity and EndThreadAffinity methods to notify a host that a block of code depends on the identity of a physical operating system thread.

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, stellen eine eigene Thread Verwaltung bereit.Some hosts of the common language runtime, such as Microsoft SQL Server 2005, provide their own thread management. Ein Host, der die eigene Thread Verwaltung bereitstellt, kann eine ausgeführte Aufgabe jederzeit von einem physischen Betriebssystem Thread zu einem anderen verschieben.A host that provides its own thread management can move an executing task from one physical operating system thread to another at any time. Die meisten Aufgaben sind von diesem Wechsel nicht betroffen.Most tasks are not affected by this switching. Einige Tasks verfügen jedoch über Thread Affinität, d. h., Sie hängen von der Identität eines physischen Betriebssystemthreads ab.However, some tasks have thread affinity - that is, they depend on the identity of a physical operating system thread. Diese Tasks müssen den Host benachrichtigen, wenn Sie Code ausführen, der nicht gewechselt werden soll.These tasks must inform the host when they execute code that should not be switched.

Wenn Ihre Anwendung z. b. eine System-API aufruft, um eine Betriebssystem Sperre mit Thread Affinität (z. b. eine Win32-CRITICAL_SECTION abzurufen), müssen Sie BeginThreadAffinity vor dem Erwerb der Sperre aufrufen und EndThreadAffinity, nachdem die Sperre freigegeben wurde.For example, if your application calls a system API to acquire an operating system lock that has thread affinity, such as a Win32 CRITICAL_SECTION, you must call BeginThreadAffinity before acquiring the lock, and EndThreadAffinity after releasing the lock.

Wenn Sie diese Methode in Code verwenden, der unter SQL Server 2005 ausgeführt wird, muss der Code auf der höchsten Host Schutz Ebene ausgeführt werden.Using this method in code that runs under SQL Server 2005 requires the code to be run at the highest host protection level.

Sicherheit

SecurityCriticalAttribute
Erfordert volle Vertrauenswürdigkeit für den unmittelbaren Aufrufer.Requires full trust for the immediate caller. Dieser Member kann nicht von teilweise vertrauenswürdigem oder transparentem Code verwendet werden.This member cannot be used by partially trusted or transparent code.

Gilt für:

Siehe auch