Sdílet prostřednictvím


Thread.EndThreadAffinity Metoda

Definice

Upozorní hostitele, že spravovaný kód dokončil provádění instrukcí, které závisí na identitě aktuálního vlákna fyzického operačního systému.

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

Výjimky

Volající nemá požadované oprávnění.

Příklady

Následující příklad ukazuje použití metod a k upozornění hostitele, že blok kódu závisí na identitě vlákna BeginThreadAffinity EndThreadAffinity fyzického operačního systému.

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), například Microsoft SQL Server 2005, poskytují vlastní správu vláken. Hostitel, který poskytuje vlastní správu vláken, může kdykoli přesunout spuštěnou úlohu z jednoho vlákna fyzického operačního systému do jiného. Toto přepnutí nemá vliv na většinu úkolů. Některé úlohy však mají spřažení vláken – to znamená, že závisí na identitě vlákna fyzického operačního systému. Tyto úlohy musí informovat hostitele, když spustí kód, který by neměl být přepnut.

Pokud například vaše aplikace volá rozhraní API systému za účelem získání zámku operačního systému, který má spřažení vláken, například Win32 CRITICAL_SECTION, musíte před získáním zámku zavolat a po uvolnění BeginThreadAffinity EndThreadAffinity zámku.

Použití této metody v kódu, který běží pod SQL Server 2005, vyžaduje, aby byl kód spuštěn na nejvyšší úrovni ochrany hostitele.

Platí pro

Viz také