Thread.EndThreadAffinity Metoda

Definice

Upozorňuje hostitele, že spravovaný kód dokončil provádění pokynů, které závisí na identitě aktuálního fyzického vlákna operačního systému.Notifies a host that managed code has finished executing instructions that depend on the identity of the current physical operating system thread.

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

Výjimky

Volající nemá požadované povolení.The caller does not have the required permission.

Příklady

Následující příklad ukazuje použití metod BeginThreadAffinity a EndThreadAffinity k oznamování hostitele, že blok kódu závisí na identitě fyzického vlákna operačního systému.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

Poznámky

Někteří hostitelé modulu CLR (Common Language Runtime), jako je například Microsoft SQL Server 2005, poskytují vlastní správu vláken.Some hosts of the common language runtime, such as Microsoft SQL Server 2005, provide their own thread management. Hostitel, který poskytuje vlastní správu vláken, může kdykoli přesunout vykonávající úlohu z jednoho fyzického vlákna operačního systému do jiného.A host that provides its own thread management can move an executing task from one physical operating system thread to another at any time. Většina úkolů není tímto přepnutím ovlivněna.Most tasks are not affected by this switching. Některé úkoly však mají spřažení vlákna – to znamená, že závisí na identitě fyzického vlákna operačního systému.However, some tasks have thread affinity - that is, they depend on the identity of a physical operating system thread. Tyto úlohy musí informovat hostitele, když spustí kód, který by neměl být přepnut.These tasks must inform the host when they execute code that should not be switched.

Například pokud vaše aplikace volá systémové rozhraní API, aby získala zámek operačního systému, který má spřažení vláken, jako je například CRITICAL_SECTION Win32, je nutné před získáním zámku volat BeginThreadAffinity a EndThreadAffinity po uvolnění zámku.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.

Použití této metody v kódu, který běží v SQL Server 2005 vyžaduje, aby byl kód spuštěn na nejvyšší úrovni ochrany hostitele.Using this method in code that runs under SQL Server 2005 requires the code to be run at the highest host protection level.

Zabezpečení

SecurityCriticalAttribute
Vyžaduje úplný vztah důvěryhodnosti pro bezprostředně volajícího.Requires full trust for the immediate caller. Tohoto člena nelze použít v kódu s částečnou důvěryhodností ani v transparentním kódu.This member cannot be used by partially trusted or transparent code.

Platí pro

Viz také