Udostępnij za pośrednictwem


Thread.EndThreadAffinity Metoda

Definicja

Powiadamia hosta, że kod zarządzany zakończył wykonywanie instrukcji, które zależą od tożsamości bieżącego wątku systemu operacyjnego fizycznego.

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

Wyjątki

Obiekt wywołujący nie posiada wymaganych uprawnień.

Przykłady

W poniższym przykładzie pokazano użycie BeginThreadAffinity metod i EndThreadAffinity do powiadamiania hosta, że blok kodu zależy od tożsamości fizycznego wątku systemu operacyjnego.

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;

public class MyUtility
{
    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.
    }
}
open System.Threading

let 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

Uwagi

Niektóre hosty środowiska uruchomieniowego języka wspólnego, takie jak Microsoft SQL Server 2005, zapewniają własne zarządzanie wątkami. Host, który zapewnia własne zarządzanie wątkami, może przenosić wykonywanie zadania z jednego fizycznego wątku systemu operacyjnego do innego w dowolnym momencie. Większość zadań nie ma wpływu na to przełączanie. Jednak niektóre zadania mają koligację wątków — to znaczy, że zależą od tożsamości fizycznego wątku systemu operacyjnego. Te zadania muszą poinformować hosta o wykonaniu kodu, który nie powinien być przełączany.

Jeśli na przykład aplikacja wywołuje interfejs API systemu w celu uzyskania blokady systemu operacyjnego, która ma koligację wątków, taką jak win32 CRITICAL_SECTION, należy wywołać wywołanie BeginThreadAffinity przed uzyskaniem blokady i EndThreadAffinity po zwolnieniu blokady.

Użycie tej metody w kodzie uruchamianym w SQL Server 2005 wymaga uruchomienia kodu na najwyższym poziomie ochrony hosta.

Dotyczy

Zobacz też