Thread.BeginThreadAffinity Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Powiadamia hosta, że kod zarządzany ma zostać wykonany w celu wykonania instrukcji, które zależą od tożsamości bieżącego wątku systemu operacyjnego fizycznego.
public:
static void BeginThreadAffinity();
public static void BeginThreadAffinity ();
[System.Security.SecurityCritical]
public static void BeginThreadAffinity ();
static member BeginThreadAffinity : unit -> unit
[<System.Security.SecurityCritical>]
static member BeginThreadAffinity : unit -> unit
Public Shared Sub BeginThreadAffinity ()
- 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.